Collection:List 和Set
是所有单列(E emelement)集合中的共性方法,所有单例集合都可以使用共性方法
没有带索引的方法
单例都可以用foreach遍历,增强for循环目标只能是集合和数组
List接口:
Vector集合 同步,单线程,慢 {(ArrayList集合查询快增删慢) (LinkedList集合查询慢增删快)不是同步,就是多线程 效率高 速度快}
List集合有序集合 允许重复的元素 有存取顺序 有索引可以for循环遍历
List接口带索引的方法;
add(index,element)添加该元素到指定位置上
set(index,element)添加该元素替换指定位置的元素
Set接口:
无序:TreeSet集合(二叉树实现一般用于排序) HashsSet集合(哈希表+(红黑树)实现)
有序: LinkedHashSet集合(哈希表+链表实现 可以存取有序)
Set集合 存取无序 不允许存储重复元素 没有索引不能for遍历 不同步
普通for循环遍历:
for(int i=0;i<list.size();i++){
Sting s=list.get(i);
Syso(s);}
所有集合都可以用的遍历方式:
迭代器遍历:
Iterator it=collection.iterator();
while(it.hasNext()){
String s =it.next();
Syso(s); }
增强for遍历:
数组:
for(String s:collection){
syso(s);}
int[]arr={1,2,3};
for(int a:arr){
syso(a);}
Map接口:
多列(K key键,V value值)一一对应 key不可以重复(key唯一),value可以重复 两个类型可以相同可以不同
HashMap:
底层是哈希表,查询速度特别快、是无序集合 存储和取出顺序可能不一致
map.put(“a”=“a”) map.put(“c”=“c”)map.put(“b”=“b”)map.put(“a”=“d”)
key不允许重复,无序{a=d,b=b,c=c}最后输入的替换了之前的key
作为key的元素,必须重写hashcode和equals方法以保证key唯一
1.8之前:哈希表=数组+单向链表
1.8后 :哈希表=数据+单向链表。哈希表=数组+红黑树(链表长度超过8)(提高查询速度)
linkedhashmap继承hashmap
底层哈希表+链表(保证迭代顺序)
是一个有序集合,存储好取出顺序一致
map.put(“a”=“a”) map.put(“c”=“c”)map.put(“b”=“b”)map.put(“a”=“d”)
key不允许重复,有序{a=d,c=c,b=b}最后输入的替换了之前的key
map.put(k,v)指定的键和值添加到map集合
返回值v
存储对的时候,key不重复,返回是null
存储对的时候,key重复,会使用新的V替换map重复的V,返回被替换的v
map遍历
Map<String,Integer> map=new HashMap<>();
Set set=map.keySet();
for (String key:set)
{
Integer value=map.get(key);
System.out.println(key+"="+value);
}
使用entry(等于结婚证) foreach遍历
Map<String,Integer> map=new HashMap<>();
Set<Map.Entry<String,Integer>> set=map.entrySet();
for (Map.Entry<String,Integer> entry:set)
{ String key=entry.getkey;
Integer value=entry.getvalue;
System.out.println(key+"="+value);
}
额外知识:
两个元素不同,哈希值相同,哈希冲突
哈希相同,调用equals比较值认定相同,就不会存储到集合
哈希相同,调用equals比较值认定不同,就存储到集合