Map
特点:key-value映射。
HashMap:
数据-链表(JDK1.7),数据-链表-红黑树(JDK1.8)。
Key无序,唯一(Set)。
Value无序,不唯一(Collection)。
hashmap和hashtable的区别:
1.hashmap线程不安全,效率比较高
2.hashmap中key和value都可以为空,hashtable不允许为空。
3.hashmap初始值为2的N次幂,方便&运算,hash & (initCapacity-1)。
4.在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位,是0则数组下标不变,是1则需要将索引位置加上旧数组长度值即为新数组的下标。
LinkedHashMap:
链表。
有序的HashMap速度快。
TreeMap:
红黑树。
有序速度没有hash快。
Map遍历操作:
1.通过key来遍历,可以通过key来获取value值。
Set<String> keys= map.keySet();
for(String key:keys){
System.out.println(key+"="+map.get(key));
}
2.通过value来遍历,只能获取对应的value值,不能根据value来获取key。
Collection<Integer> values= map.values();
for(Integer i:values){
System.out.println(i);
}
3.迭代器遍历
Set<String> key1= map.keySet();
Iterator<String> iterator=key1.iterator();
while (iterator.hasNext()){
String key=iterator.next();
System.out.println(key+"="+map.get(key));
}
4.Map.entry:表示的是K-V组合的一组映射关系,成组出现。
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterator<Map.Entry<String,Integer>> iterator1=entries.iterator();
while (iterator1.hasNext()){
Map.Entry<String,Integer> next=iterator1.next();
System.out.println(next.getKey()+"="+next.getValue());
}
Collections工具类
Collections和Collection不同,前者是集合的操作类,后者是集合。
Collections提供的静态方法:
addAll():批量增加。
List<String> list=new ArrayList<String>();
list.add("abb");
list.add("bccc");
list.add("cd");
list.add("d");
Collections.addAll(list,"effffff","fgggg","ghhhhh");
sort():排序。
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length()<o2.length()){
return 1;
}else if (o1.length()>o2.length()){
return -1;
}else {
return 0;
}
}
});
System.out.println(list);
//按照字典顺序排序
Collections.sort(list);
System.out.println(list);
//以上两种的结合
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length()<o2.length()){
return 1;
}else if (o1.length()>o2.length()){
return -1;
}else {
return 0;
}
}
});
binarySearch():二分查找。
二分查找的时候需要先进行排序。
System.out.println(Collections.binarySearch(list,"abb"));
fill():替换。
把list中所有元素都填充成指定值。
Collections.fill(list,"m");
System.out.println(list);
shuffle():随机排序。
reverse():逆序。
Arrays
Arrays提供了数组操作的工具类,包含很多方法。
集合和数组之间的转换。
数组转成list。
-
List<Integer> ints=Arrays.asList(1,2,3,4,5);
list转成数组。
-
Object[] objects = ints.toArray();