集合框架List和Set

来源:互联网 发布:什么是java多线程 编辑:程序博客网 时间:2024/05/20 13:19
List提供了增删改查的动作,
增加:add(element),add(index,element);
删除:remove(element) remove(index);
修改:set(index,element);
查询:get(index);
vector:可以增长的数组结构,同步的。效率是非常低的。已经被ArrayList替代。
ArrayList:是数组结构的,长度是可变的(原理是创建新数组+复制数组),查询的速度很快,增删较慢,不同步的。
LinkedList:是链表结构,不同步的,增删速度很快,查询速度较慢。
可用于实现堆栈,队列。
堆栈:先进后出:first in last out:filo。
队列:先进先出:first in first out:fifo.
list可以存储重复元素,如果需求中要求容器中的元素必须保证唯一性则list不能保证。但保证了元素的顺序。


Set:不包含重复元素的集合,不保证顺序,而且方法和collection一致。set集合取出元素的方式只有一种:迭代器。
hashSet:哈希表结构,不同步,保证元素唯一性的方式依赖于:hashcode(),equals()方法。
哈希算法:也称散列
数组中存储的都是元素《--》哈希值对应关系
该数组称为哈希表。查询速度要比数组快。
和数组相比也有自己的弊端:重复元素存不进去,但会保证元素唯一性。数组则无法保证。
当哈希值冲突时:
即元素哈希值一致了,这时会再次判断元素的内容是否相同(要依赖于equals方法)。若equals返回true,就意味着两个元素相同,则不会存入。若返回false,则两个元素不相同,存储,继续通过算法算出位置,称为拉链法。
TreeSet:基于TreeMap的navigableSet实现,使用元素的自然顺序对元素进行排序。可以对Set集合中的元素进行排序。使用的是二叉树结构。使用的对象比较方法的结果是否为零,是零,视为相同元素,则不用存入。
TreeSet集合中元素的比较有两种方式:1,元素自身具备自然排序,其实就是实现了Comparable接口,重写了comparableTo方式。
2,比较器,其实就是在创建TreeSet集合时,在构造函数中指定具体的比较方式。需要定义一个类,实现Comparable接口,重写comparable方法。 
再往集合中存储对象时,通常该对象都需要覆盖hashCode,equals同时创建Comparable接口,建立对象的自然排序。通常还有一个方法也会复写toString();

比较器练习:
对字符串进行长度排序,由短到长。

foreach循环:其实就是增强for循环,
格式:for(数据类型 变量:Collection集合或数组){}
用于遍历collection和数组,通常只能遍历元素,不要再遍历的过程中做对集合元素的操作。


看集合对象:
分体系:List   Set
list:新出的子类都是以list结尾的,通常都是非同步的。
ArrayList:数组结构,查询速度快。
linkedList :链表结构,增删速度快。
Set:
HashSet:哈希结构:查询速度更快,元素唯一。通过hashCode(),equals方法保证唯一性。
TreeSet:看到Tree,就知道二叉树,可以排序排序就想到comparable的compareto方法,Comparator的compare方法。

0 0