容器
容器在解决什么问题?
存储一堆的数据是容器解决的最基本的问题。针对不同的需求有不用的容器。主要在于删除,插入,查询,效率,长度,排序,去重,数据结构
- 数组。数组是Java内置的容器。效率很快,因为是最基本的。但是长度却被限制,其余的容器去很好的解决这个问题。
- list:list集合是对数组的一个扩充。对于排序,对于数组长度的限制,ArrayList对于一般情况足够使用,但是如果需要进行大量的插入和删除工作,那么还是需要用链表实现的LinkedList
- set:set集合是为了进行去重,HashSet一般情况足够对付,但是如果同时需要兼顾排序的话,则需要使用TreeSet,如果是需要插入和删除上,则使用LinkedHashSet。但是set都是不能快速的进行访问。
- map:map集合主要解决键值对数据结构的数据。一般使用HashMap足够使用,但是需要排序则使用TreeMap。
数组
基础
- 初始化
1.String[] strings = new String[n];
2.String[] strings = {"1","2"};
3.String[] strings = new String[]{"1","2"};
- 唯一访问的属性,length(),该属性只代表数组的长度,不代表里面具体元素的个数
- 访问,[]
-
排序:
- 对象实现Comparable接口,Arrays.sort()
- 定义Comparator的实现类
集合
分类
-
colleciton
- list
- set
- map
hashMap
hashMap的使用就在于对于键的使用,使得我们可以快速的查询。但是如果我们都把键存储在数组中,使用数组进行查找总是很慢的。所以我们可以折中,使用键生成的hash码来存储值。但是hash码有可能相同,所以我们可以将相同的hash码的值存储在同一个容器中。所以这个hash码的设计变得很关键。因为如果设计固定不变,就变回我们刚才所说的情况。但是如果hash码设计成每次都是变化的,那么这个值将不好查询。
转换
array –> list
list,set –> Collection.toArray()
list –> set