Java高级
集合(List、Set、Map)
虚线是接口,实线是类
List:继承Collection接口,有序可重复
Set:继承Collection接口,无序不可重复
Map:存储键值对,提供key到value的映射。key无序不可重复,value可重复
ArrayList
内存中分配连续的空间,遍历元素和随机访问效率较高
其他方法
// 使用 asList 方法将数组转换为 List
List<String> list = Arrays.asList(array);
// 从列表中移除所有在toRemove列表中的元素
ArrayList<String> toRemove = new ArrayList<>();
ArrayList<String> list = new ArrayList<>();
list.removeAll(toRemove);
//从列表中添加所有在arrList列表中的元素
ArrayList<String> arrList = new ArrayList<>();
ArrayList<String> list = new ArrayList<>();
list.addremove(arrList);
//指定位置添加元素,范围在size之前包含size
list1.add(2,news4);
for (News news : list1) {
System.out.println(news.getName() + " " + news.getId());
}
System.out.println("----------------");
//删除指定位置元素
list1.remove(2);
for (News news : list1) {
System.out.println(news.getName() + " " + news.getId());
}
System.out.println("----------------");
//判断元素是否存在
System.out.println(list1.contains(news1));
System.out.println("----------------");
//获取元素的索引
System.out.println("元素的索引是:"+list1.indexOf(news2));
System.out.println("----------------");
//获取索引位置的元素内容
System.out.println("元素内容是:"+list1.get(1).getName());
System.out.println("----------------");
//返回集合中元素个数
System.out.println("集合中元素个数是:"+list1.size());
System.out.println("----------------");
//修改
list1.set(1,new News("鬼低语",2));
//清空集合
list1.clear();
//判断集合是否为空
System.out.println("清空后集合是否为空:"+list1.isEmpty());
LInkedList
set(index,value)修改指定下标内容
采用链表方式储存,插入、删除元素相比ArrayList较快
!
其他方法
list.offerFirst("D");
这行代码将字符串 "D" 添加到链表 list 的开头。offerFirst 是 LinkedList 特有的方法,用于在链表头部添加元素。
list.offerLast("E");
这行代码将字符串 "E" 添加到链表 list 的末尾。offerLast 也是 LinkedList 特有的方法,用于在链表尾部添加元素。
list.add(0, "F");
这行代码将字符串 "F" 添加到链表 list 的索引 0 位置。add(int index, E element) 是 List 接口的方法,用于在指定位置插入元素。
list.peekFirst();
这行代码获取链表 list 的第一个元素,但不移除它。peekFirst 是 LinkedList 特有的方法,用于查看链表头部的元素。
list.peekLast();
这行代码获取链表 list 的最后一个元素,但不移除它。peekLast 是 LinkedList 特有的方法,用于查看链表尾部的元素。
list.pollFirst();
这行代码获取并移除链表 list 的第一个元素。pollFirst 是 LinkedList 特有的方法,用于移除并返回链表头部的元素。
list.pollLast();
这行代码获取并移除链表 list 的最后一个元素。pollLast 是 LinkedList 特有的方法,用于移除并返回链表尾部的元素。
list.removeFirstOccurrence("B");
这行代码移除链表 list 中第一次出现的字符串 "B"。removeFirstOccurrence 是 LinkedList 特有的方法,用于移除第一次出现的指定元素。
list.removeLastOccurrence("D");
这行代码移除链表 list 中最后一次出现的字符串 "D"。removeLastOccurrence 是 LinkedList 特有的方法,用于移除最后一次出现的指定元素。
HashSet
查找高效的集合,元素是无序的,非线程安全,创建一个Set集合需要指定泛型,没有索引,常用来去重。如果不指定泛型,则以第一个元素的类型作为泛型。
Map
getOrDefault() 是 java.util.Map 接口中定义的一个方法,它允许您以一种安全的方式从 Map 中获取值。如果键存在,则返回该键对应的值;如果键不存在,则返回一个默认值。
//合并两个Map,如果键相同,则对应值相加
Map<Integer, Integer> map1 = new HashMap<>();
Map<Integer, Integer> map2 = new HashMap<>();
map1.put(1, 5);
map1.put(2, 7);
map1.put(3, 8);
map2.put(1, 3);
map2.put(3, 9);
map2.put(2, 4);
map2.put(5, 5);
Map<Integer, Integer> result = new HashMap<>(map1);
//getOrDefault方法,如果map中不存在该键,则返回默认值,这里默认值是0,如果map1中存在该键,返回改建对应的值+map2中对应的值,否则返回map2中对应的值
for (Map.Entry<Integer, Integer> entry : map2.entrySet()) {
result.put(entry.getKey(), result.getOrDefault(entry.getKey(), 0) + entry.getValue());
}
System.out.println("合并后的Map:");
for (Map.Entry<Integer, Integer> entry : result.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
另外一些方法
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("US", "美国");
map.put("RU","俄罗斯");
map.put("CN","中国");
map.put("JP","日本");
//通过键获取对应的值
System.out.println(map.get("RU"));
//size()方法获取Map的大小
System.out.println(map.size());
//containsKey()方法判断Map是否包含指定键
System.out.println(map.containsKey("JP"));
//containsValue()方法判断Map是否包含指定值
System.out.println(map.containsValue("日本"));
//isEmpty()方法判断Map是否为空
System.out.println(map.isEmpty());
//putAll()方法添加多个键值对
Map<String, String> map2 = new HashMap<>();
map2.putAll(map);
System.out.println(map2.get("RU"));
//remove()方法删除指定键值对
map.remove("JP");
System.out.println(map.get("JP"));
//keySet()方法获取Map的所有键,需要用Set类型接收
System.out.println(map.keySet());
//values()方法获取Map的所有值,需要用Collection类型接收
System.out.println(map.values());
//clear()方法清空Map
map.clear();
System.out.println(map.isEmpty());
}