Collection
动态保存
接口:list,set
双列集合,单列集合
Collection遍历
Iterator iterator=coll.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());//next()下移,并且把下移以后集合中的元素返回
//或者使用增强for循环,底层仍然是迭代器
}
单列集合
list
add();
remove();//指定删除某个元素,或者按照索引删除
contains();//查找元素
isEmpty();
clear();
addAll(collection);
removeAll(collection);
list.get(2);//
sublist(int start,int end);//返回[start,end)
set();
.size();
ArrayList
- ArrayList 维护一个存放object的elementData数组
- 创建时,默认elementData容量为0,第一次扩容,容量变为10,后再扩容,容量变成原来的1.5倍
- 如果使用的是指定大小的构造器,则初始elementData的容量为指定大小,后再扩容,容量变成原来的1.5倍
- transient修饰的属性不会被序列化
- 扩容机制:Arrays.copyOf()
vector
线程同步,线程安全,但效率不高
- 扩容:无参,默认10,就按2倍扩容;指定大小,按照两倍扩容
LinkedList
实现了双向链表和双端队列,可以添加任意元素(可以重复,null)
线程不安全
first,last指向首节点和尾节点
prev,next,item前指针,后指针
set
无序,没有索引
treeset hashset
- 遍历:迭代器,增强for循环(不能用索引遍历)
- set可以加null,元素不能重复(实际上看的是地址)
set.add(new String("dd"));
set.add(new String ("dd));
- 取出的顺序不是添加的顺序,但是固定的
- 执行add方法后会返回一个boolean确认是否添加成功
- 平时需要的时候可以根据需要重写hashcode and equals(直接用idea wizard)
- hashset去重机制:先用hash函数算出索引,然后找到相应的table,如果无数据,直接加入,如果有数据就用equals遍历比较,如果不相同则加入
- treeset去重机制:如果传入一个comparator比较器(匿名对象),就使用实现的compare方法去重,如果方法返回0就认为是相同的元素/数据,就不添加,如果没有传入comparator对象,则以添加的对象的实现的comparable接口的compareto方法去重
LinkedHashSet
- 是hashset的子类
- 底层维护了一个数组+双向链表
- 每个节点有pre和next属性
- 第一次添加的时候,table的大小为16,node的类型为LinkedHashMap$Entry
map
map和collection并列
- 保存具有映射关系的键值对
- key和value可以是任何封装的对象,会封装到HashMap$Node的对象中
- Map中的key值不允许重复
- 放入同一个key值,后面的value替换掉之前的value
- 计算重复的时候只用key的hashcode值
- key,value都可以为空,但是key为空只能有1个,value为空可能有多个
- 通过一个key一定能找到唯一的一个value
- Entry的运行类型是node,因为HashMap$Node实现了Entry的接口
- Entry提供getKey(),getValue(),方法
- 常见实现类有HashMap,TreeMap,Properties
- HashMap线程不安全
map接口的常用方法
Map map=new HashMap();
map.put(key,value);
map.get(key);//返回对应的value
map.getValue();
map遍历方式
- 增强for循环
- 迭代器
- Iterator iterator=key.iterator();
- 通过EntrySet
Set entryset=map.entrySet();
for(object entry:entrySet){
Map.entry m=(Map.entry) entry;
m.getKey();
}
hashtable
- key和value都不能为空
- hashtable线程安全,hashmap线程不安全
- 底层有数组hashTableEntry[]
collection工具类
//构造函数
Collections();
//
Collections.reverse(list);
Collections.shuffle(list);
Collections.sort(list,new Comparator(){
public int compare(object o1,object o2){
return ((String)o1.length()-(String)o2.length());
}
})
Collections.swap(list,postion1,position2);//交换指定位置的两个元素
Collections.max(list ,new comparator(){
public int compare(object o1,object o2){
return ((String)o1.length()-(String)o2.length());
}
})
Collections.frequency(list,object);//返回一个对象的出现次数
Collections.copy(dest,list);//将list拷贝到dest中,为了完整拷贝,应该先给dest添加元素,使其大小和list的大小一样
标签:map,object,list,value,Collections,key,集合
From: https://www.cnblogs.com/hithin/p/17202205.html