第八章单列集合 Collection List ArrayList LinkedList Set HashSet TreeSet

目录

1.Collection接口

2.List接口

2.1ArrayList实现类

ArrayList 泛型使用

ArrayList 排序

2.2LinkedList实现类

LinkedList用法

3.Set接口

        3.1HashSet

Set集合遍历

        消除List集合的重

3.2TreeSet


1.Collection接口

 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() 返回集合的元素个数

2.List接口

List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List 集合。

//此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)
List list4 = List.of();

2.1ArrayList

 
//实例化ArrayList
ArrayList list1 = new ArrayList();
//此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)
List list4 = List.of();
//list4.add(10); 此行是错误的,因为List.of() 对象是只读的

对ArrayList添加、删除、判断、遍历


//添加元素
list.add(0, "python");
list.addAll(List.of("html", "css"));

//修改元素
list.set(list.indexOf("python"),"python编程");

//判断元素
System.out.println(list.containsAll(List.of("mysql", "java")));

//判断对象在集合中的索引位置
System.out.println(list.indexOf(200));

//输出集合元素个数
System.out.println(list.size());

//删除元素remove(Object o) remove(int index)
//此时删除的是索引为10的元素,如果下标没有10就出异常
var oo = list.remove(10);

//集合遍历
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));
}
}



ArrayList 泛型使用

//使用泛型,泛型不支持8大基本类型
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<>();
var list3 = new ArrayList<String>();
//泛型不支持基本类型,必须是对象类型,8大基本类型不支持。
//List<int> list4 = new ArrayList<>(); 错误
List<Integer> list5 = new ArrayList<>();
//自动装箱操作,如果没有自动装箱,
list5.add(6);
//list5.add("java"); 错误

ArrayList 排序

//实例声明一个list对象实例
List<Integer> list = new ArrayList<>
(List.of(10,2,0,5,15,11,7,8,11,25));
//Collections 集合工具类
//升序
Collections.sort(list);
//降序
Collections.sort(list,(a,b)->b-a);
//升序
Collections.sort(list,(a,b)->a-b);
//乱序,洗牌
Collections.shuffle(list);

字符串对象

var list = new ArrayList<>(List.of("java", "c", "go", "c++",
"basic", "python", "sql", "php", "javascript"));
System.out.println(list);
//a-z升序
Collections.sort(list);
//z-a降序
Collections.sort(list,(a,b)->b.compareTo(a));
//乱序,洗牌
Collections.shuffle(list);
//根据字符串升序,进行排序 升序
Collections.sort(list,(a,b)->a.length()-b.length());
//降序
Collections.sort(list,(a,b)->b.length()-a.length());
//洗牌
Collections.shuffle(list);

自定义对象

 如果对象使用集合工具的排序方法,此类必须实现 Comparable 接口,实现 方法

@Override
public int compareTo(cn.webrx.Student b) {
//相当于 a.score - b.score 按对象的成绩升序由小到大
return this.score - b.score;
}
//定义的集合 泛型使用Student
List<cn.webrx.Student> list = new ArrayList<>(List.of(
new cn.webrx.Student(10,"李四",55),
new cn.webrx.Student(20,"张三",25),
new cn.webrx.Student(15,"赵六",15),
new cn.webrx.Student(22,"张三丰",88),
new cn.webrx.Student(3,"周强",76)
));


//默认排序 按成绩升序
Collections.sort(list);

//按id降序排序
Collections.sort(list,(a,b)->b.getId()-a.getId());

//根据姓名升序  字符串用compareTo方法比较
Collections.sort(list,(a,b)->a.getName().compareTo(b.getName()));
System.out.println(list);
//洗牌
Collections.shuffle(list);

2.2LinkedList实现类

LinkedList是List接口的实现类,因此也实现了List的方法。但LinkedList是采用链表结构的方式来实现List接口的,因此在进  行insert 和remove动作时效率要比ArrayList高

LinkedList<String> link = new LinkedList<>();

LinkedList用法

boolean add(E e):在链表后添加一个元素,如果成功,返回true,否则返回false; 
void addFirst(E e):在链表头部插入一个元素; 
addLast(E e):在链表尾部添加一个元素; 
void add(int index, E element):在指定位置插入一个元素。
get(int index):按照下边获取元素; 
getFirst():获取第一个元素; 
getLast():获取最后一个元素;

3.Set接口

Set接口继承了Collection接口,集合中元素是不能重复的。如果有相关的元素重复内容,就保留原来的 元素,添加的元素取消,不能随机读取元素,没有顺序。

public interface Set extends Collection

3.1HashSet

实例化对象,添加元素

Set<String> set = new HashSet<>();

set.add("java");
set.addAll(List.of("php", "es6", "ts", "ts", "ts"));
System.out.println(set.size());
//如果有相关的元素内容,就保留原来的元素,添加取消

判断,清空,删除操作

Set<Integer> set = new HashSet<>(List.of(10,20,30,40,50,10,20));

//要删除多个元素时,只要删除一个元素就返回true,一个元素都删除不了就是false
System.out.println(set.removeAll(List.of(150, 130, 120)));

//删除除了30的其它元素。
set.removeIf(e->e!=30);
HashSet集合,中的对象必须重写如下两个方法: equals() hashCode()
Set集合遍历
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.addAll(List.of(11, 22, 33, 44));
System.out.println(set);
System.out.println(set.size());
System.out.println(set.isEmpty());
//遍历
for(int i : set){
System.out.println(i);
}
消除List集合的重复
List<Integer> list= new ArrayList<>(List.of(1,2,3,4,5,1,2,3,4));
System.out.println(list.size());
System.out.println(list);
List<Integer> ok = new ArrayList(new HashSet<Integer>(list));
System.out.println(ok.size());
System.out.println(ok);

3.2TreeSet

是一个有序,可排序的,不可重复元素的集合工具类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值