目录
1.List接口(线性表)
增加
ArrayList:动态数组,保存元素的个数不确定
LinkedList:链表
add(任意类型,新值) add(int index,任意数据类型) 在索引为index的位置插入新元素
默认add方法在集合末尾添加
查找:
get(index):返回index位置的元素值
boolean contains(元素值):判断List是否包含指定值
修改
set(int index,新值):修改index的元素为新元素,返回修改前的元素值
删除
remove(int index):删除指定位置的元素
remove(元素值):按值删除,默认删除出现的第一个元素
遍历List和Set集合非常方便,使用for each 循环即可
若不是遍历具体的每个值,而是想打印一下集合的内容,直接println方法传入即可(集合类都覆写了toString方法)
2.Set接口(一次存储一个不重复元素)
Set、Map天然是一个查找或搜索的语义
应用:很方便的去重处理
可以利用Set集合的add方法的返回值对第一次出现的元素做特殊处理
元素的添加顺序和插入顺序没有太大关系(因为hash值不一定有序)
Set集合的查找:contains
如果现在需要插入顺序和存储顺序相同,用LinkedHashSet
Set集合没有修改元素的方法,只能把这个元素删除再添加一个新元素
3.Map接口:
List接口和Set接口都是一次存储一个元素,Map接口是一个映射关系,一次存储俩个元素key=value。(键值对关系)
Map中要求key不重复,value重复
3.1添加查找
查找:
方法一:V value =map.get(key):根据key取出映射的value,若key不存在返回null
方法二:V value =map.getorDefault(key,default):根据key取出的映射的value,若key不存在返回null
判断当前Map是否包含指定key值
key boolean containKey(key)
value boolean containsValue(value)
3.2删除
remove方法根据key值删除整个键值对
V remove (Object key);返回删除前的value值,若不存在key,返回null
3.3Map集合的遍历:一般不去遍历
3.3.1.获取当前Map中的所有key集合
因为key值唯一,所以返回的是一个Set集合。
3.3.2.获取当前Map中的所有value集合
value值可以重复,返回Collection(List的父接口),可以看作返回了List。
3.3.2.若想依次取出Map值遍历,需要将Map集合转为Set集合后进行遍历。
Map.Entry:此接口中存储的就是一个个键值对对象(这里认为key,value是一个对象,捆绑在一起)
4.源代码
package lcltest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ListTest { public static void main(String[] args) { int[] data = {1,3,5,7,9,10,10,13}; List<Integer> list = new ArrayList<>(); for (int i : data) { list.add(i); } System.out.println(list); // for-each遍历集合 for (int temp : list) { System.out.print(temp + " "); } // System.out.println(list.contains(10)); // System.out.println(list.get(0)); } }
import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; public class SetTest { public static void main(String[] args) { // int[] data = {1,2,3,3,4,5,4,6,6}; // Set<Integer> set = new HashSet<>();//前面是接口 // for (int i : data) { // set.add(i); // } // if (set.add(6)) { // System.out.println("添加成功"); // }else { // System.out.println("元素6已经存在!"); // } // System.out.println(set); String[] str = {"吴用", "鲁智深", "武松"}; Set<String> set = new HashSet<>(); for (String s : str) { set.add(s); } System.out.println(set.contains("吴用")); System.out.println(set); } }
package lcltest; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapTest { public static void main(String[] args) { // 学号和姓名的映射关系 // 学号作为Key,姓名作为Value // Map<key,value> Map<Integer,String> map = new HashMap<>(); map.put(1,"王淇"); map.put(2,"王小熊"); map.put(3,"李四"); // 当key重复时,更新值即可 map.put(1,"张三"); // Map -> Set Set<Map.Entry<Integer,String>> entry = map.entrySet(); // 使用for-each遍历 for (Map.Entry<Integer,String> temp : entry) { System.out.println(temp.getKey() + "=" + temp.getValue()); } // // 删除key对应的那个键值对 // System.out.println(map.remove(10)); // System.out.println(map); // System.out.println(map.containsKey("1")); // System.out.println(map.containsValue("王小熊")); // String ret = map.get(1); // System.out.println(ret); // // 返回null // System.out.println(map.get(10)); // // 若key不存在,返回默认值 // System.out.println(map.getOrDefault(10,"美女")); } }