Collections类常用方法
// 把一个或多个元素添加到指定集合
Collections.addAll(list, 12,11,3,8,5,11,11,222,333);
// 找出最大的元素
System.out.println("max:" + Collections.max(list));
// 找出最小的元素
System.out.println("min:" + Collections.min(list));
// 排序, 默认升序,可用匿名内部类重写sort方法
Collections.sort(list);
// reverse 反转集合内的元素
Collections.reverse(list);
// 替换集合中所有 和指定的值相等元素 为 其他的值
Collections.replaceAll(list, 11, 666);
// 替换集合中两个位置的元素
Collections.swap(list, 1, 5);
// shuffle 随机排序
Collections.shuffle(list);
// 填充, 使用 指定的值 替换所有元素
Collections.fill(list, 1);
// 清空集合
list.clear();
集合转数组
// 把集合转为数组
// 默认为 Object类型的
Object[] array = list.toArray();
// 转成指定类型的数字, 需要传入对应类型的数组,数组不需有元素,但不能为 null
String[] arr = list.toArray( new String[]{} );
System.out.println(Arrays.toString(arr));
数组转List,迭代器的使用
// 可以把数组,转换为 List集合, 该List的 size 是不可变的
List<Integer> list = Arrays.asList(11, 8, 23, 43);
// 使用 可以变长的集合存储 上述的元素
List<Integer> list2 = new ArrayList<>(list);
// 获取迭代器对象
Iterator<Integer> it = list2.iterator();
// hasNext 判断是否有下一个元素
while(it.hasNext()){
// 有, 使用 next() 取这个元素
Integer next = it.next();
System.out.println(next);
}
LinkedList相关:特点:双向链式存储
LinkedList<String> list = new LinkedList<String>();
// addFirst 在头部添加
list.addFirst("11");
list.addLast("999");
// 查看 第一个/ 最后一个 元素
String first = list.getFirst();
String last = list.getLast();
// 删除并返回第一个元素
String removeFirst = list.removeFirst();
// 删除并返回最一个元素
String removeLast = list.removeLast();
HashMap(线程不安全)相关,用来存键值对(两个值),key不能重复
// 创建对象
HashMap<Integer, String> map = new HashMap<Integer, String>();
// 添加 一个键值对
map.put(1, "aa");
// 根据 key 取 value
String value = map.get(2);
// 根据 key 删除 对应的 value
String remove = map.remove(0);
System.out.println("0-remove:" + remove);
// 是否含有指定的 key
System.out.println("containsKey1:"+map.containsKey(666));
// 是否含有指定 value
System.out.println("containsValue:"+map.containsValue("aa"));
// 是否为空集合
System.out.println("isEmpty:"+map.isEmpty());
遍历HashMap的三种方式
//通过keySet()获取所有key的集合,然后遍历所有的key
Set<Integer> keySet = map.keySet();
for (Integer key : keySet) {
String val = map.get(key);
System.out.println(key + "=" + val);
}
System.out.println("------------");
//通过values()获取所有value的集合,然后遍历所有的value
Collection<String> values = map.values();
for (String val : values) {
System.out.println("val=" + val);
}
System.out.println("------------");
//通过entrySet()获取所有key-value的集合,然后遍历所有的key-value键值对
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> entry : entrySet) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
以单个结构存储元素,这类集合的超级父接口是Collection;
以键值对结构存储元素,这类集合的超级父接口是Map;
Collection下面有两个接口:List(内元素:有序、可重复、有下标),Set(无序、去重、无下标)
List下面有三个常用类:ArrayList,LinkedList,Vector
ArrayList:底层用的是数组的数据结构,非线程安全
LinkedList:底层用的是双向链表的数据结构
Vector:底层用的是数组的数据结构,线程安全
Set中,常用的两类又分为HashSet和TreeSet
HashSet集合在new对象的时候,其实底层new的是HashMap,放在K当中
HashMap:底层是哈希表
TreeSet:底层是TreeMap,new的时候,new的是TreeMap(二叉树,可排序)
Map接口有两个常用的实现类:HashMap,HashTable(线程安全,不常用),SortedMap(是个接口,该接口的实现类是TreeMap)。注意:Map接口没有实现迭代器