Java 集合

java 中的集合:

Collection->List、Set

List->LinkedList 和ArrayList

Set->HashSet  、SortedSet->TreeSet

其中红色标注的是为接口:黑色的为实现类

Collection为集合中分的根接口,List是可以包含重复元素,有序的集合;提供按照索引的方式访问,有次序,位置不能改变;

Set  不可以包含重复元素,子接口 SortedSet是按照升序排列的Set;

实现类:

本质:ArrayList   可以看做是自动增长容量的数组,实际上是按照对象数组实现的,自动增长容量 就是当容量不够的时候,重新生成一个新的,足够长的数组;再将数组元素拷贝到新的元素中;

利用ArrayList.ToList()可以返回一个对象数组,也可以利用Arrays.AsList()  返回一个列表;返回固定尺寸的列表,就不能修改大小了,可以用set()方法修改其中的元素值,但是不能扩容;

Arrays.asList() 和ArrayList.toArray()作为数组和集合类的桥梁;

LinkedList

本质:是利用双向循环链表实现的,利用linkedList实现栈(Stack),队列(Queue)双向队列(double-end-queue);

LinkedList:

void addFirst(Object obj);

void addLast(Object obj);

Object getFirst();

Object getLast();

Object remove(int index);

boolean remove(Object obj);

Object removeFirst();

Object removeLast();

判断是否为空:

LinkedList继承了一个方法 isEmpty()如果没有包含任何元素,返回true  f否则返回false;

ArrayList底层采取对象数组完成 ,而LinkedList采取双向链表实现;其中每个元素对象除了本身数据以外还有两个引用,分别指向前一个元素和后一个元素;如果我们经常在List前面或者中间插入或者删除元素,则用LinkedList比较好,否则用ArrayList较为迅速;因为删除和添加元素都要修改其后面的索引;

HashSet是一个实现了Set接口的hash table(哈希表);依靠hash map实现;应该要为存储到各个散列表的每个元素指定hashcode()和equals();

因为实现了set接口,所以不能有重复元素;

散列表介绍:散列表又叫哈希表,基本思想为以节点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该节点存储在散列表中的地址。

当散列表的元素存储太满,就必须进行再散列,将产生一个新的散列表。将所有元素存到新的散列表中,原先旧的散列表将被删除;

在Java中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子为0.75,当散列表中75% 的的位置上已经放满,将进行再散列;

负载因子越高(越接近1.0),内存的使用率越高,元素的寻找时间越长,

负载因子越高(越接近0.0),元素的寻找时间越短,内存浪费越多。

HashSet的缺省负载因子为0.75

TreeSet 是依靠TreeMap实现的,TreeSet是一个有序集合,TreeSet中将元素按照升序排列,缺省是按照自然排序排列,意味TreeSet要实现Comparable、接口。

Map(HashMap)-> SortedMap(TreeMap)

存储的是Key-Vaulue键值对,不能包含重复的key ,但是可以包含重复的Value,TreeSet是按照Key升序排列的Map




你可能感兴趣的:(Java 集合)