集合 collection 模版
LinkedList<String> list1 = new LinkedList<>();
LinkedList 是一个类 <>泛型集合限制类型一般是对象类 new 对象需要开辟一个新的地址存储元素
new LinkedList<>() 创建了一个新的 LinkedList 实例
集合概念
常见集合有 collection,和map两种
collection中用HashSet 和TreeSet,,ArrayList,LinkedList ,LinkedHashSet
ArrayList,LinkedList 可以保存重复的集合元素
Arrays List 便于查询集合中的元素
LinkedList 便于增删集合中的元素
HashSet 和TreeSet 可以用于去除集合中的元素,
HashSet 集合排序是无序的,不会按照插入的顺序显示集合中的元素(非乱序)
TreeSet 集合排序是有序的(对于数字而言升序),不会按照插入的顺序显示集合中的元素(非乱序)
需要按照集合的插入顺序的话,可以使用(LinkedHashSet)
//创建一个集合对象(ArrayList,LinkedList,HashSet,TreeSet,LinkedHashSet)
ArrayList<Integer> integers = new ArrayList<>();
LinkedList<Integer> list = new LinkedList<Integer>();
HashSet<Integer> integers1 = new HashSet<>();
TreeSet<Integer> integers2 = new TreeSet<>();
Set<Integer> setLinkedHashSet = new LinkedHashSet<>();
collection 的增删改查含得
1.增
add(index,element) 根据索引值插入集合元素(Haset和TreeSet除外)
add (element)默认在集合尾端插入元素
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
System.out.println(integers);
//输出值 [3, 1]
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(0,3);
System.out.println(list);
//输出值 [3, 1]
HashSet<Integer> integers1 = new HashSet<>();
integers1.add(67);
integers1.add(1);
integers1.add(5);
integers1.add(3);
integers1.add(0);
System.out.println(integers1);
//注意:如果是数子是单位的话,会按照数字进行升序排序
//输出值 [0, 1, 67, 3, 5]
TreeSet<Integer> integers2 = new TreeSet<>();
integers2.add(3);
integers2.add(1);
// 输出值 [0, 1, 3, 5, 67]
Set<Integer> setLinkedHashSet = new LinkedHashSet<>();
setLinkedHashSet.add(3);
setLinkedHashSet.add(1);
//输出值 [67, 1, 5, 3, 0]
运行结果
补充: add(array) 可以添加集合,是直接把以集合形式塞入另一个集合,不是以元素的方式进入集合
用addAll(array)可以添加整个集合全部元素
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
LinkedList<Integer> list = new LinkedList<Integer>();
list.addAll(integers)
System.out.println(list);
//输出为 [3, 1]
2.得(限LinkedList ArrayList)
get(index) 根据索引值获取集合元素
注意:LinkedList有次功能
根据集合获取第一个数值 getFirst()
根据集合获取最后一个值 getLast()
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
integers.add(9);
System.out.println(integers.get(1));
//输出值 1
LinkedList<Integer> list = new LinkedList<>();
list.add(9);
list.add(1);
list.add(0,3);
integers.get(1);
System.out.println(list);//输出值 [3, 9, 1]
System.out.println(list.get(1)); //输出值 9
System.out.println(list.getFirst());//输出值 3
System.out.println(list.getLast()); //输出值 1
对于 HashSet,TreeSet ,可以用Iterator集合迭代器
概念引入:
hasNext:返回的是boolean值,它是从集合元素的最前头开始判断,如果后续有元素就返回true
这边只举一个HashSet的,TreeSet,LinkedSet,ArrayList,LinkedList都一样,
区别:
ArrayList,LinkedList 可以通过索引获取值
HashSet的,TreeSet,LinkedSet 无法通过索引获取值
HashSet<Integer> integers1 = new HashSet<>();
integers1.add(67);
integers1.add(1);
integers1.add(5);
integers1.add(3);
integers1.add(0);
Iterator<Integer> integerIterator = integers1.iterator();
while(integerIterator.hasNext()){
System.out.println(integerIterator.next());
}
//输出值 0 , 1 ,67 ,3, 5
System.out.println(integers1);
//输出值 [0, 1, 67, 3, 5]
错误写法
Iterator<Integer> integerIterator = new HashSet<Integer>().iterator();
new HashSet<Integer>().add(67);
new HashSet<Integer>().add(1);
new HashSet<Integer>().add(5);
new HashSet<Integer>().add(3);
new HashSet<Integer>().add(0);
while(integerIterator.hasNext()){
System.out.println(integerIterator.next());
}
//必须新建一个集合实例,否则不会保留集合添加的数值
3.含
contains() 可以判断是否含有某个元素
containsAll() 可以判断是否含有(集合)所有元素
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
LinkedList<Integer> list = new LinkedList<Integer>();
list.addAll(integers);
System.out.println(list.contains(1));//输出值 true
System.out.println(list.containsAll(integers)); //输出值 true
containAll(element)会报错
System.out.println(list.containsAll(1));//系统会报错
4.改
set(index,element) 根据index值获取数值,在进行修改
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
LinkedList<Integer> list = new LinkedList<Integer>();
list.addAll(integers);
list.set(0,98);
System.out.println(list);//输出值 [98, 1]
5.查
indexOf(element) 查询的需要的元素,如果找到返回索引值,找不到返回-1
补充 如果该集合中有多个相同的元素时候,会返回第一个出现的位置
lastIndexOf 如果该集合中有多个相同的元素时候,会返回最后出现的位置
ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(0,3);
LinkedList<Integer> list = new LinkedList<Integer>();
list.addAll(integers);
list.set(0,98);
System.out.println(list.indexOf(1));//输出值 1
System.out.println(list.indexOf(90)); //输出值 -1
System.out.println(list); //输出值 [98, 1]
6.删
remove(index) 根据集合的索引的删除元素,返回集合对应索引的值
注意: 这是String类型,可以使用 remove(element) 删除特定元素,
Integer类型 ,系统会提示index类型
remove(element) 删除特定元素,如果删除成功返回true,否则false
LinkedList<String> list1 = new LinkedList<>();
list1.add("one");
list1.add("two");
list1.add("three");
System.out.println(list1);//输出值 [one, two, three]
System.out.println(list1.remove("three"));//输出值 true
System.out.println(list1.remove(0)); //输出值 one
System.out.println(list1);//输出值 [two]
collection 不同集合之间的操作
1.克隆
clone() 将一个集合复制出来进行备份,但此处是个Object类方法,
如果需要将此备份保留需要转类型
LinkedList<String> list1 = new LinkedList<>();
list1.add("one");
list1.add("two");
list1.add("three");
LinkedList<String> list2 = (LinkedList<String>)list1.clone();
System.out.println(list1.clone()); //输出值 [one, two, three]
System.out.println(list2); //输出值 [one, two, three]
2.去交集
removeAll() 去除两个集合交集元素
注意 array1.removeAll(array2) 只对array1有效果,array2不会改变
LinkedList<String> list1 = new LinkedList<>();
list1.add("one");
list1.add("two");
list1.add("three");
LinkedList<String> list2 = (LinkedList<String>)list1.clone();
System.out.println(list2);//输出值 [one, two, three]
System.out.println(list1.removeAll(list2));//输出值 true
System.out.println(list1);//输出值 []
System.out.println(list2);//输出值 [one, two, three]
3.取交集
retainAll() 只保留两个集合交集元素
注意 array1.retain(array2) 只对array1有效果,array2不会改变
LinkedList<String> list1 = new LinkedList<>();
list1.add("one");
list1.add("two");
list1.add("three");
LinkedList<String> list2 = (LinkedList<String>)list1.clone();
list1.add("four");
System.out.println(list1);//输出值 [one, two, three, four]
System.out.println(list2);//输出值 [one, two, three]
System.out.println(list1.retainAll(list2));//输出值 true
System.out.println(list1);//输出值 [one, two, three]
System.out.println(list2);//输出值 [one, two, three]
集合map模版
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
//<String, Integer>有键值对,所以第一个时限制key的类型,第2个是限制value的类型
map 用于利用键值key,和值value,的存储元素,用key作为索引来获取元素的值
map 增删改含得
1.增
put(key,value) key是键值 相当于数组下标,value是集合元素保留的值.
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
System.out.println(stringIntegerHashMap);
//输出值 {banana=2, apple=1, pear=3}
2.得
get(key) 通过key值获取值
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
System.out.println(stringIntegerHashMap.get("banana"));//输出值 2
System.out.println(stringIntegerHashMap);//输出值 {banana=2, apple=1, pear=3}
遍历map集合获取键值对
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
第一种用keySet
Set<String> keys = stringIntegerHashMap.keySet();
for (String key : keys) {
Integer value = stringIntegerHashMap.get(key);
System.out.println("Key: " + key + ", Value: " + value);
}
/* 输出值 Key: banana, Value: 2
Key: apple, Value: 1
Key: pear, Value: 3
*/
第二种用entrySet
for (Map.Entry<String, Integer> entry : stringIntegerHashMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
/* 输出值 Key: banana, Value: 2
Key: apple, Value: 1
Key: pear, Value: 3
*/
3.含
containKey(key);判断是否包含某元素的键值
containValue(value);判断是否包含某元素的存储值
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
System.out.println(stringIntegerHashMap.containsKey(01));//输出值 false
System.out.println(stringIntegerHashMap.containsValue(01));//输出值 true
System.out.println(stringIntegerHashMap);//输出值 {banana=2, apple=1, pear=3}
改
put(key,newValue) 可以通过同一个key值来修改值
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
System.out.println(stringIntegerHashMap);//输出值 {banana=2, apple=1, pear=3}
stringIntegerHashMap.put("apple",9);
System.out.println(stringIntegerHashMap);//输出值 {banana=2, apple=9, pear=3}
4.删
remove(key) 根据key值删除对应的键值对
HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
stringIntegerHashMap.put("apple",01);
stringIntegerHashMap.put("banana",02);
stringIntegerHashMap.put("pear",03);
System.out.println(stringIntegerHashMap);//输出值 {banana=2, apple=1, pear=3}
stringIntegerHashMap.remove("banana");
System.out.println(stringIntegerHashMap);//输出值 {apple=1, pear=3}