- Map接口
- HashMap
- Hashtable
- Properties
- TreeMap
- 如何选择集合实现类
- Collections工具类
Map接口
Map与Collection并列存在,用于保存具有映射关系的数据Key-Value
Map接口实现类的特点:
- key和value可以是任何引用类型的数据
- key不允许重复,可以为null,但只能有一个
- value可以重复,可以为null,可以有多个
常用方法
- put,用于增
- remove,用于删
- 需要修改时,直接put一个键相同的
- Object get(key),用于查,返回value
- size,获取元素个数
- Bool containsKey(key),查找键是否存在
- Set keySet(),获取所有的键,返回到Set中
- Collection values(),取出所有的values
遍历方法
获取k-v
Set set = hashMap.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = hashMap.get(key);
System.out.println(key+"-"+value);
}
只获取value
Collection values = hashMap.values();
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()) {
Object value = iterator1.next();
}
HashMap
就是Map的实现子类,方法类似
底层机制:扩容什么的,size大了以后链表变成红黑树什么的。
线程不安全
Hashtable
线程安全
键和值都不能为null
Properties
Properties类继承自Hashtable类
使用特点与Hashtable类似
Properties还可以用于从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改
TreeMap
如何选择集合实现类
- 先判断存储的类型(一组对象【单列】或一组键值对【双列】)
- 一组对象【单列】:Collection接口
- 允许重复:List
- 增删多:LinkedList(底层维护了一个双向链表)
- 改查多:ArrayList(底层维护了Obje类型的可变数组) - 不允许重复:Set
- 无序:HashSet(底层时HashMap,维护了一个哈希表,即数组+链表+红黑树)
- 排序:TreeSet
- 插入和取出顺序一致:LinkedHashSet,维护数组+双向链表
- 允许重复:List
- 一组键值对【双列】:Map
- 键无序:HashMap
- 键排序:TreeMap
- 键插入顺序和取出顺序一致:LinkedHashMap
- 读取文件:Properties
Collections工具类
Collections是一个用于操作Set、List和Map等集合的工具类
提供了一系列静态方法对集合元素进行排序、查询和修改等操作
- reverse,反转
- shuffle,随机排序
- sort,默认是升序排序,可以自己定义排序规则(写匿名内部类,实现Comparator接口)
- swap,交换某两个元素
- Object max(Collection),根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator),根据Comparator指定的顺序返回集合中的最大元素
- min类似于max
- int frequency(Collection,Object),返回集合中指定元素的出现次数
- void copy(List dest,List src),将src中的内容复制到dest中,条件:dest中的元素数大于等于src
- boolean replaceAll(List,Object o1,Object o2)使用o2替换List中的所有o1值
ArrayList list = new ArrayList();
list.add("jack");
list.add("mali");
list.add("haha");
list.add("hsp");
//反转
Collections.reverse(list);
System.out.println("list is"+list);
//随机排序
Collections.shuffle(list);
System.out.println("List is"+list);
//升序排序
Collections.sort(list);
System.out.println("List is"+list);
//自定义排序规则
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String)o2).compareTo((String)o1);
}
});
System.out.println("List is"+list);
Collections.swap(list,0,1);
System.out.println("List is"+list);
//max
System.out.println(Collections.max(list));
//自定义max方法
Object obj1=Collections.max(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String)o2).compareTo((String)o1);
}
});
System.out.println(obj1);
//frequency
int n=Collections.frequency(list,"jack");
System.out.println(n);
//copy
ArrayList list1 = new ArrayList();
for (int i = 0; i < 4; i++) {//list1的包含元素的数量必须大于等于list的
list1.add(" ");
}
Collections.copy(list1,list);
System.out.println("List1= "+list1);;
//replaceAll
Collections.replaceAll(list,"jack","杰克");
System.out.println(list);