JAVA Collection集合接口常用方法总结
目录
1.集合体系
2.Collection集合常用API
2.1常用方法示例
3.三种遍历方法
传统方法
①.迭代器遍历
②.增强for
③.lambda表达式
4.存储自定义数据类型
4.1两种排序方法
①实现Comparable接口
②使用Comparator接口
5.List集合常用方法
6.Collections工具类常用方法
7.Map常用方法
8.map遍历方式
①键找值
②键值对
③lambda表达式
9.TreeSet自定义排序方式
10.HashSet去重
注:建议使用CTRL+F搜索关键字 笔记学习自itheima的公开教程
1.集合体系
Collection
List:添加的元素是有序、可重复、有索引。
ArrayList
LinkedList
Set
HashSet:无序、不重复、无索引。
LinkedHashSet:有序、不重复、无索引。
TreeSet:按照大小默认升序排序、不重复、无索引。
2.Collection集合常用API
public boolean add(E e) // 把给定的对象添加到当前集合中
public void clear() // 清空集合中所有的元素
public boolean remove(E e) // 把给定的对象在当前集合中删除
public boolean contains(Object obj) // 判断当前集合中是否包含给定的对象
public boolean isEmpty() // 判断当前集合是否为空
public int size() // 返回集合中元素的个数
public Object[] toArray() // 把集合中的元素,存储到数组中
2.1常用方法示例
public class Test02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
//1.添加
list.add("张三");
list.add("李四");
list.add("王五");
//打印
System.out.println(list); // [张三, 李四, 王五]
//2.删除
list.remove("张三");
System.out.println(list); // [李四, 王五]
//3.判断是否为空
System.out.println("是否为空:" + list.isEmpty());
//4.返回元素个数
System.out.println("元素个数为:" + list.size());
//5.判断是否存在
System.out.println("是否存在李四:" + list.contains("李四"));
//6.存储到数组
Object[] obj = list.toArray();
for (Object o : obj) {
System.out.print(o + " "); // 李四 王五
}
//7.清空元素
list.clear();
System.out.println(list);
System.out.println("元素个数为:" + list.size());
}
}
3.三种遍历方法
传统方法
public class Test02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//传统方法
for (int i=0; i<list.size(); i++) {
System.out.print(list.get(i)); // 张三李四王五
}
}
}
①.迭代器遍历
public class Test02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String next = it.next();
System.out.print(next); //张三李四王五
}
}
}
②.增强for
public class Test02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//增强for
for (String s : list) {
System.out.println(s);
}
//张三
//李四
//王五
}
}
③.lambda表达式
public class Test02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//lambda表达式
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
//简写方式1
list.forEach( s -> {
System.out.println(s);
});
//简写方式2
list.forEach(System.out::println);
}
}
4.存储自定义数据类型
首先创建一个用户类,可以自己定义
public class User {
private String name;
private Integer age;
private Double price;
public User(String name, Integer age, Double price) {
this.name = name;
this.age = age;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", price=" + price +
'}';
}
}
生成一下构造方法和get和set方法
idea的快捷键是alt+ins
然后在实现类里用之前的遍历方法打印出来
public class Test {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三",18,98.32));
list.add(new User("李四",11,15.78));
list.add(new User("王五",36,76.37));
list.add(new User("赵六",70,1.53));
list.add(new User("钱七",6,9.85));
for (User user : list) {
System.out.print(user.getName() + " ");
System.out.print(user.getAge() + "岁 ");
System.out.print(user.getPrice() + "元");
System.out.println();
}
//张三 18岁 98.32元
//李四 11岁 15.78元
//王五 36岁 76.37元
//赵六 70岁 1.53元
//钱七 6岁 9.85元
}
}
4.1两种排序方法
①实现Comparable接口
public class User implements Comparable<User> {
private String name;
private Integer age;
private Double price;
public User(String name, Integer age, Double price) {
this.name = name;
this.age = age;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", price=" + price +
'}';
}
@Override
public int compareTo(User o) {
//return this.age - o.age; //升序
return o.age - this.age; //降序
}
}
注意<>里是定义的实体类
然后实现方法
@Override
public int compareTo(User o) {
//return this.age - o.age; //升序
return o.age - this.age; //降序
}
之后实现
public class Test {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三",18,98.32));
list.add(new User("李四",11,15.78));
list.add(new User("王五",36,76.37));
list.add(new User("赵六",70,1.53));
list.add(new User("钱七",6,9.85));
Collections.sort(list);
for (User user : list) {
System.out.print(user.getName() + " ");
System.out.print(user.getAge() + "岁 ");
System.out.print(user.getPrice() + "元");
System.out.println();
}
}
}
②使用Comparator接口
public class Test {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三",18,98.32));
list.add(new User("李四",11,15.78));
list.add(new User("王五",36,76.37));
list.add(new User("赵六",70,1.53));
list.add(new User("钱七",6,9.85));
list.sort(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
//return Double.compare(o1.getPrice(),o2.getPrice()); //升序
return Double.compare(o2.getPrice(),o1.getPrice()); //降序
}
});
for (User user : list) {
System.out.print(user.getName() + " ");
System.out.print(user.getAge() + "岁 ");
System.out.print(user.getPrice() + "元");
System.out.println();
}
}
}
5.List集合常用方法
public class List01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
//在某个索引位置插入元素
list.add(1,"赵六"); // 在李四前插入
System.out.println(list); // [张三, 赵六, 李四, 王五]
//删除元素
list.remove("李四");
System.out.println(list); // [张三, 赵六, 王五]
list.remove(2);
System.out.println(list); // [张三, 赵六]
//获取元素
System.out.println(list.get(0)); // 张三
//修改元素
System.out.println(list.set(0, "零零零")); // 张三
System.out.println(list); // [零零零, 赵六]
System.out.println("-------");
// 遍历 之前的三种
// 原始方式
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
6.Collections工具类常用方法
排序功能和4.1的List排序相同
public class CollectionsTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
//批量添加元素
Collections.addAll(list,18,21,33,64,98,82);
//打乱集合元素
Collections.shuffle(list);
System.out.println(list); // [33, 98, 18, 64, 82, 21]
//排序
Collections.sort(list);
System.out.println(list); // [18, 21, 33, 64, 82, 98]
}
}
7.Map常用方法
public class MapTest {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(5,"张三");
map.put(2,"李四");
map.put(6,"王五");
//根据键删除键值对应的元素
map.remove(5);
//判断集合是否包含 指定的键 / 值
System.out.println(map.containsKey(5)); //false
System.out.println(map.containsValue("王五")); //true
System.out.println(map); //{2=李四, 6=王五}
//是否为空
System.out.println(map.isEmpty()); //false
//获取集合大小
System.out.println(map.size()); //2
//根据键获取值
System.out.println(map.get(2)); //李四
//获取全部键的集合
Set<Integer> keySet = map.keySet();
System.out.println(keySet); //[2, 6]
//获取全部的值的集合
Collection<String> values = map.values();
System.out.println(values); //[李四, 王五]
Map<Integer,String> map2 = new HashMap<>();
map2.put(5,"张三");
map2.put(8,"李四");
map2.put(12,"七七");
map2.put(99,"八八");
map.put(5,"张三");
System.out.println(map); //{2=李四, 5=张三, 6=王五}
map.putAll(map2);
System.out.println(map);
//{2=李四, 99=八八, 5=张三, 6=王五, 8=李四, 12=七七}
// 键不能重复 值可以重复
}
}
8.map遍历方式
①键找值
public class Test {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(5,"张三");
map.put(2,"李四");
map.put(6,"王五");
// 一 、键找值
// 1.拿到集合的全部键
Set<Integer> keys = map.keySet();
// 2.遍历每个键 根据键提取值
for (Integer key : keys) {
String s = map.get(key);
System.out.println(key + " " + s);
}
}
}
②键值对
public class Test2 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(5,"张三");
map.put(2,"李四");
map.put(6,"王五");
//2.键值对
//把map集合转为set集合
Set<Map.Entry<Integer, String>> entries = map.entrySet();
//遍历取值
for (Map.Entry<Integer, String> entry : entries) {
//System.out.println(entry);
//2=李四
//5=张三
//6=王五
Integer key = entry.getKey();
String value = entry.getValue();
//System.out.print(key + " "); 2 5 6
//System.out.print(value + " "); 李四 张三 王五
System.out.println(key + " " + value);
//2 李四
//5 张三
//6 王五
}
//System.out.println(entries); [2=李四, 5=张三, 6=王五]
}
}
③lambda表达式
public class Test3 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(5,"张三");
map.put(2,"李四");
map.put(6,"王五");
//简写
map.forEach( (key,value) -> System.out.println(key +"--"+ value) );
//2--李四
//5--张三
//6--王五
//3. lambda表达式
map.forEach(new BiConsumer<Integer, String>() {
@Override
public void accept(Integer integer, String s) {
//System.out.println(integer + " " + s);
//2 李四
//5 张三
//6 王五
System.out.println(integer); //2 5 6
}
});
}
}
9.TreeSet自定义排序方式
还有一种实现Comparable接口如4.1所示
public class TreeSetTest {
public static void main(String[] args) {
Set<User> set = new TreeSet<>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
//return Double.compare(o1.getPrice(), o2.getPrice());
return o1.getAge() - o2.getAge() >= 0 ? 1 : -1;
}
});
set.add(new User("张三",18,9.9));
set.add(new User("李四",17,8.9));
set.add(new User("王五",16,7.9));
set.add(new User("赵六",15,6.9));
set.add(new User("七七",15,14.3));
for (User user : set) {
System.out.println(user);
}
//User{name='赵六', age=15, price=6.9}
//User{name='王五', age=16, price=7.9}
//User{name='李四', age=17, price=8.9}
//User{name='张三', age=18, price=9.9}
}
}
10.HashSet去重
重写hashCode()和equals()方法即可