Java学习_Day14

学习内容:
一、常见的数据结构
二、List集合
三、Set集合
四、可变参数
五、Collections工具类

集合的继承体系
Collection接口
–List(有序、有索引、元素可以重复)
ArrayList
LinkedList
Vector
–Set(无序、无索引、元素不可重复)
在这里插入图片描述【注意:LinkedHashSet是HashSet的子类,只是为了排版】
一、常见的数据结构

栈:先进后出(子弹夹)
队列:先进先出(安检机)
在这里插入图片描述
数组:查询快增删慢
链表:查询慢增删快

红黑树: 查询速度很快(是基于二分查找)

二、List集合
List有索引的,相对于Collection而言多了一些针对索引操作的方法
在这里插入图片描述
public void add(int index,E e)
在指定的索引位置添加元素
public E remove(int index)
移除指定索引位置的元素
public E get(int index)
根据索引来获取元素
public E set(int index,E e)
在指定索引位置修改元素,把被修改的元素返回。

ArrayList集合
数组结构:查询快增删慢
因为他的底层是数组(数组是一片连续的内存空间-所以查询快)所以查询快,但增删慢,每次增删都要重新创建一个数组所以效率低
【线程不安全、不同步、效率高】

Vector集合
数组结构:查询快增删慢线程
【线程安全、同步、效率低】
在这里插入图片描述
LinkedList集合
链表结构:查询慢增删快
底层是链表结构-查询慢,增删快,里面包含了大量操作首位元素的方法
LinkedList集合,相对于Collection而言多了一些针对头(First)和尾(Last)进行操作的方法

	public void addFirst(E e)
		往集合的头部添加元素
	public void addLast(E e)
		往集合的尾部添加元素
	
	public void removeFirst()
		移除集合的第一个元素
	public void removeLast()
		移除集合的最后一个元素
	
	public void getFirst()
		获取集合的第一个元素
	public void getLast()
		获取集合的最后一个元素
	
	public void push(E e)
		往集合的头部添加元素(模拟压栈)
	public void pop()
		移除集合的第一个元素(模拟弹栈)

三、Set集合
Set集合特点:无序、无索引、元素不能重复
HashSet集合
哈希表结构:查询快增删也快(因为HashSet底层是hash表)
hashcode值(十进制随机生成)是逻辑地址不是物理地址
每个对象都有自己的hashCode值不相同
hash表的存储原理:
在这里插入图片描述

   HashSet集合保证元素唯一性的方式
	1)复写hashCode()方法
	2)复写equals()方法

LinkedHashSet集合
哈希表结构+链表:既能保证元素唯一,也能保证元素有序
LinkedHashSet集合保证元素唯一性的方式
1)复写hashCode()方法
2)复写equals()方法

TreeSet类【了解】
二叉树结构:可以对元素进行排序
排序方式1:【自然排序】
让元素实现Comparable接口,复写compareTo方法
如果返回值是正数: 比已有的元素大
如果返回值是负数: 比已有的元素小
如果返回值为0 : 和已有的元素相同(不存)

【Integer已经实现了Comparable接口,按照自然顺序进行排列】
【String已经实现了Comparable接口,按照字典顺序进行排列】

排序方式2:【比较器排序】
在创建TreeSet集合的同时,指定比较器(Comparator接口)

TreeSet<Integer> set=new TreeSet<>(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				//排序规则
				//o1-o2  升序
				//o2-o1  降序
				return o2-o1;
			}
		});

四、可变参数
格式:数据类型… 变量名
本质:可变参数的本质就是一个【数组】,这样不用创建一个数组对象就能完成同类型数据的操作
注意:可变参数只能写在最后一个,不能写在第一个

//可变参数格式: 数据类型... 变量名
public static void sum(int... arr){
    //求数组元素的和
    int sum=0;
    for (int i = 0; i < arr.length; i++) {
        sum+=arr[i];
    }
    System.out.println(sum);
} 

public static void main(String[] args){
	sum(3,4,5,6,7);
}

五、Collections工具类
专门用于操作Collection集合的工具类

ArrayList<String> list=new ArrayList<>();
//一次向集合中添加多个元素
Collections.addAll(list,"hello","world","java","android");
System.out.println(list);

//把list集合中,1索引和3索引元素互换位置
System.out.println("互换前:"+list);
Collections.swap(list,1,3);
System.out.println("互换后:"+list);

//对List集合进行随机打乱
Collections.shuffle(list);
System.out.println("打乱后:"+list);

//对List集合进行排序,注意:元素必须实现了Comparable接口才能排序。
Collections.sort(list);
System.out.println("排序后:"+list);

ArrayList<Student> list2=new ArrayList<>();

Collections.addAll(list2,new Student("张三",29),new Student("王五",19),new Student("赵六",2));
//对List集合进行排序,使用比较器进行排序
Collections.sort(list2, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
		//o1.xxx- o2.xxx 升序
		//o2.xxx- o1.xxx 降序
		return o1.getAge()-o2.getAge();
	}
});
System.out.println("排序后:"+list2);

//获取list2集合中年龄最大的那个对象
Student max = Collections.max(list2, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
		return o1.getAge() - o2.getAge();
	}
});
System.out.println(max);

第15天学习内容链接:
https://blog.csdn.net/LJN951118/article/details/89196345

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值