1.Collection
1.1 List(有序,有索引,允许重复元素)
包含带索引方法(特有的方法)
.add()
.get()
.remove()
.set()
list集合3种遍历方式
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s= iterator.next();
System.out.println(s);
}
for (String s : list) {
System.out.println(s);
}
1.1.1 ArrayList(底层数组,查询快,增删慢,多线程)
List list= new ArrayList();
1.1.2 LinkedList(底层链表,查询慢,增删快,多线程)
LinkedList linkedList = new LinkedList();
操作首位元素方法(特有的)
addFirst() <=> push()/ addLast()
getFirst() / getLast()
removeFirst()<=>pop() / removeLast()
1.1.3 Vector(底层数组,单线程,1.0版本最早期集合,现在几乎不用了)
1.2 Set(无索引,不包含重复元素)
不能使用普通for循环
set集合存储不重复元素: 前提 : 存储的元素重写hashCode()和equals()方法。 原理 : 在调用add()方法时会先调用hashCode()方法比较地址中是否有这个哈希值,没有–>存储,有(哈希冲突)–>调用再调用euqals()方法比较是否是相同元素,不相同就存,相同就不存
1.2.1 HashSet (哈希表结构,查询速度快,无序)
Set set = new HashSet();
1.2.2 LinkedHashSet(继承了HashSet,哈希表+链表结构,链表结构保证有序)
2.Map
2.2.2 Hashtable
2.2.3 LinkedHashMap
2.2.4 TreeMap
2.2.5 Prooerties
3.Collections
4.Hash值
定义:hash值是一个十进制的整数,由本地系统(native)随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址)
.hashCode()
哈希冲突:两个元素不同,但是哈希值相同就是哈希冲突.
哈希表结构查询数据快的原因: 是因为先根据hash值分组了,将hash值相同的元素挂到一个链表上,如果挂载的元素超过8位就将这个链表的结构转换为红黑树.
|