目录
引言
一,Collection集合
1.1,List接口
1.1.1,ArrayList
1.1.1.1,ArrayList的add()添加方法
1.1.1.2,ArrayList的remove()删除方法
1.1.1.3,ArrayList的contains()判断方法
1.1.1.4,ArrayList的set()排序方法和size()大小方法
1.1.1.5,ArrayList的遍历
1.1.2,LinkedList
1.2,Set接口
1.2.1,HashSet
1.2.1.1,HashSet的add()添加方法
1.2.1.2,HashSet的remove()删除方法
1.2.1.3,HashSet的contains()判断方法
1.2.1.4,HashSet的size()大小方法和clear()清空方法
1.2.2,Treeset
二,Map集合
2.1,HashMap集合
2.1.1,HashMap的put()添加方法
2.1.2,HashMap的get()获取方法
2.1.3,HashMap的containkey()和containvalue判断方法
2.1.4,HashMap的remove()删除方法
2.1.5,HashMap的遍历
2.1.5.1,HashMap的keyset()遍历方法
2.1.5.2,HashMap的values()遍历方法
2.2,TreeMap集合
程序中可能通过数组来保存多个对象,因为数组长度是不可变的。JDK中提供了一些特殊的类,这些类 可以存储任何对象,并且长度可变,在java中这些类被为集合。集合类位于 java.util 包中。
集合有两大类:
java.util.Collection 是所有单列集合的父接口,因此在Collection中定义了单列集合 List 和 Set 通用的一些方法。
方法声明 | 功能描述 |
boolean add(Object o) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 增加一个集合(多个元素) |
void clear() | 清空集合 |
boolean remove(Object o) | 删除集合中的一个对象(元素) |
boolean removeAll(Collection c) | 删除一个集合(多个元素) |
boolean isEmpty() | 是不是空的 |
boolean contains(Object o) | 判断集合有没有这个元素 |
boolean containsAll(Collection c) | 判断集合中有没有参数集合 |
Iterator iterator() | 返回一个遍历迭代器 |
int size() | 返回集合的元素个数 |
List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List 集合,本质更象一个动态的数组。
List的常用方法:
方法 | 功能描述 |
void add(int index,Object element) | 向集合中指定位置添加一个元素 |
boolean addAll(int index,Collection c) | 向集合中指定位置增加一个集合(多个元素) |
Object get(int index) | 获取指定位置元素 |
Object remove(int index) | 删除指定位置元素 |
Object set(int index,Object element) | 修改指定位置的元素 |
int indexOf(Object o) | 获取指定元素索引 |
int lastIndexOf(Object o) | 获取最后一个元素索引 |
List subList(int fromIndex,int toIndex) | 将指定索引对象对换 |
java.util.ArrayList类是List接口的一个实现类,此对象相当于动态的数组。
实例化ArrayList对象有几种方式:
实例演示:
//实例化 ArrayList
ArrayList list1 = new ArrayList();
var list2 = new ArrayList();
List list3 = new ArrayList();
//此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)
List list4 = List.of();
//list4.add(10); 此行是错误的,因为List.of() 对象是只读的
String[] arr = {"java","javascript","python","html"};
//此方法实例出的对象,是只读的;list5.add(10);不可行
List list5 = Arrays.asList(1,2,3);
ArrayList的常用方法添加、删除、判断、大小输出,修改,,排序,遍历:
实例演示:
//实例化,这们实例化,集合可以添加任何类型的元素 默认是Object
List list = new ArrayList();
//添加元素
list.add(10);
System.out.println(list);
list.add(5.665);
System.out.println(list);
list.add("java");
System.out.println(list);
list.add("mysql");
System.out.println(list);
//在指定位置添加元素
list.add(0, "python");
System.out.println(list);
//添加多个元素
list.addAll(List.of("html", "css"));
System.out.println(list);
//在指定位置添加多个元素
list.addAll(0, List.of(100, 200, 300, 400, 500));
System.out.println(list);
输出结果:
示例演示:
List list = new ArrayList();
list.addAll(List.of("java","php","c","go","c++","java","c"));
System.out.println(list);
//删除元素remove(Object o) remove(int index)
//此时删除的是索引为5的元素,如果下标没有5就出异常
//删除对象,成功返回布尔true,失败返回false
var oo = list.remove(5);
System.out.println(oo);
//删除子集合,只要陈工删除一个元素就返回true
System.out.println(list.removeAll(List.of("mysql", "java")));
System.out.println(list);
//清空集合
list.clear();
System.out.println(list);
输出结果:
示例演示:
List list = new ArrayList();
list.addAll(List.of("java","php","c","go","c++","java","c"));
System.out.println(list);
//判断某一个元素是否存在
System.out.println(list.contains("php"));
//判断集合是否为空
System.out.println(list.isEmpty());
//判断多个元素是否都存在,有一个不存在就返回false
System.out.println(list.containsAll(List.of("mysql", "java")));
输出结果:
示例演示:
List list = new ArrayList();
list.addAll(List.of("java","php","c","go","c++","java","c"));
System.out.println(list);
System.out.println(list.size());
list.set(0,"c++");
System.out.println(list);
输出结果:
示例演示:
List list = new ArrayList();
list.addAll(List.of("java","php","c","go","c++","java","c"));
System.out.println(list);
//集合遍历
for (Object obj : list) {
System.out.println(obj);
}
for (int i = 0; i < list.size(); i++) {
System.out.printf("list.get(%d) = %s%n", i, list.get(i));
}
输出结果:
extends AbstractSequentialList
LinkedList同时实现了 List 接口和 Deque 对口,也就是收它既可以看作一个顺序容器,又可以看作一 个队列(Queue),同时又可以看作一个栈(stack),这样看来,linkedList简直就是无敌的,当你需要使 用栈或者队列时,可以考虑用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是, Java里根本没有一个叫做Queue的类(只是一个接口的名字)。关于栈或队列,现在首选是ArrayDeque, 它有着比LinkedList(当作栈或队列使用时)更好的性能。
LinkedList常用方法同ArrayList基本相同,可以参照Arraylist尝试。
Set接口继承了Collection接口,集合中元素是不能重复的。如果有相关的元素重复内容,就保留原来的 元素,添加的元素取消,不能随机读取元素,没有顺序。
public interface Set extends Collection
实例化HashSet:
示例演示:
HashSet hashset1=new HashSet();
Set hashset2=new HashSet();
var hashset=new HashSet();
示例演示:
HashSet hashset=new HashSet();
hashset.add("java");
hashset.add("c");
hashset.add("php");
hashset.add("go");
hashset.add("java");
System.out.println(hashset);
hashset.addAll(List.of("nihao","小明"));
System.out.println(hashset);
输出结果:
示例演示:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));
System.out.println(hashset);
System.out.println(hashset.remove(50));
System.out.println(hashset);
System.out.println(hashset.removeAll(List.of(80, 4, 3)));
System.out.println(hashset);
输出结果:
示例演示:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));
System.out.println(hashset);
System.out.println(hashset.contains(5));
System.out.println(hashset.containsAll(List.of(10, 5)));
System.out.println(hashset.containsAll(List.of(10, 5,4)));
输出结果:
示例代码:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));
System.out.println(hashset);
System.out.println(hashset.size());
hashset.clear();
System.out.println(hashset);
输出结果:
是一个有序,可排序的(默认是升序),不可重复元素的集合工具类。
示例演示:
//实例化TreeSet对象
//Set treemap=new TreeSet();
TreeSet treeset=new TreeSet(List.of(5,9,8,4,55,4,1));
System.out.println(treeset);
输出结果:
map接口是一个双列集合,每个元素有一个键值 对 Map
map集合方法:
HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着他不是线程安全的。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。
实例化HashMap
//实例化HashMap,使用泛型
Map hash1=new HashMap<>();
HashMap hash2=new HashMap<>();
//不使用泛型
HashMap hash=new HashMap();
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
输出结果:
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
System.out.println(hash.get("小黑"));
System.out.println(hash);
输出结果:
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
System.out.println(hash.containsKey("小黑"));
System.out.println(hash.containsValue(1));
输出结果:
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
System.out.println(hash.remove("小黑"));
System.out.println(hash.remove("小吕", 1));
输出结果:
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
for (Object o : hash.keySet()) {
System.out.println(o);
}
输出结果:
示例代码:
HashMap hash=new HashMap();
hash.put("小黑",1);
hash.put("小黄",1);
hash.put("小吕",1);
hash.put("小黑",2);
System.out.println(hash);
for (Object value : hash.values()) {
System.out.println(value);
}
输出结果:
1. 是一个有序的key-value集合,它是通过红黑树实现的。该映射根据其键的自然顺序进行排序,或 者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
2. 是继承了AbstractMap,也是以key-value集合存储。实现了NavigableMap接口,可以支持一系列 的导航方法。 比如返回有序的key集合。实现了Cloneable克隆接口。实现了java.io.Serializable序列化接口。另 外,TreeMap是非线程同步的。
实例化TreeMap
//实例化TreeMap,使用泛型
Map treemap1=new TreeMap<>();
TreeMap treemap2=new TreeMap<>();
//不使用泛型
TreeMap treemap=new TreeMap();
TreeMap应用
示例代码:
TreeMap treemap=new TreeMap();
treemap.put("小黑",1);
treemap.put("小黄",1);
treemap.put("小吕",1);
treemap.put("小黑",2);
System.out.println(treemap);
输出结果: