第四周JAVA学习心得

Collection

​​​​在这里插入图片描述1.List系列集合:添加的元素是有序(存和取的顺序一样),可重复,有索引.

2.Set系列集合:添加的元素是无序(存和取的顺序不一样),不重复,无索引.

Collection

是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

方法名称

说明

Public boolean add()

把给定的对象添加到当前集合中

Public void clear()

清空集合中所有的元素

Public boolean remove()

把给定的对象在当前的集合中删除

Public boolean contains(Object obj)

判断当前集合中是否包含给定的对象

Public boolean isEmpty()

判断当前集合是否为空

Public int size()

//创建集合
Collection<String> coll=new ArrayList<>();
		//添加元素
		//注意:如果要往List中添加数据,那么方法永远返回true,因为List系列是允许元素重复的
		//如果要往Set中添加数据, 如果当前添加的元素不存在,方法返回true,表示添加成功,
		//如果当前添加的元素已存在,方法返回false,表示添加失败,因为Set系列的集合不允许重复
		coll.add("aaa");
		coll.add("bbb");
		coll.add("ccc");
		System.out.println(coll);//[aaa,bbb,ccc]
		//清空
		// coll.clear();
		// System.out.println(coll);//[]
		//删除
		//注意:因为Collection里面定义的是共性的方法,所以此时不能通过索引记性删除,
		//只能通过元素的对象进行删除;
		//方法会有一个布尔类型的返回值,删除成功返回true.删除失败(要删除的元素不存在)返回false
		coll.remove("aaa");
		System.out.println(coll);//[bbb,ccc]
		//判断元素是否包含
		boolean result=coll.contains("bbb");
		System.out.println(result);
		Collection的遍历方式


Collection的遍历方式

迭代器遍历
增强for遍历(以前的普通for遍历只有List能用,Set没有索引,用不了)
Lambda表达式遍历
在遍历过程中需要删除元素,请使用迭代器,若是仅仅想遍历,那么使用2和3

迭代器遍历(不依赖索引)
迭代器在java中的类是Iterator,迭代器试剂盒专用的遍历方式

(1)Collection集合获取迭代器:

方法名:Iterator<> iterator()

说明:返回迭代器对象,默认指向当前集合的0索引

Iterator中的常用方法
方法名 说明
boolean hasNext() 判断当前位置是否有元素,有元素返回true,没有返回false
E next() 获取当前位置的元素,并将迭代器对象移向下一个位置

//创建迭代器对象(创建指针)

​
Iterator<String> it=coll.iterator;
​

​``//利用循环不断地去获取集合中的每一个元素

​
while(it.hasNext())//判断是否有元素,若是true,则执行循环体,若是false,则循环结束


//next方法的两件事:获取元素并移动指针

​
String str=it.next();

System.out.println(str);

​

细节:

报错NoSuchElementException
迭代器遍历完毕,指针不会复位
循环中只能用一次next方法
迭代器遍历时,不能用集合的方法进行增加或者删除
应该用it.remove()

如果要第二次遍历,只能再次获取一个新的迭代器对象

增强for遍历
其底层就是迭代器,为了简化迭代器的代码书写的;所有的单列集合和数组才能用增强for进行遍历

格式:
for(元素的数据类型 变量名:数组或者集合)

{

}

例:

​
for(String s:list)
{
System.out.println(s);
}

​

//list表示集合,s是第三南方变量,在循环过程中依次表示集合里面的每一个元素

细节:修改for中第三方变量,不会改变集合中原本的数据
Lambda表达式遍历

list.forEach(i->System.out.println(i));

List系列集合

import java.util.ArrayList;
import java.util.List;
public class App8{
public static void main(String[]args){
//创建集合
List<String> list=new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//在集合中的指定位置插入指定元素
list.add(1,"QQQ");
System.out.println(list);//[aaa,QQQ,bbb,ccc]
//删除指定所引出的元素
// String result=list.remove(0);
// System.out.println(list);
// System.out.println(result);
//修改
String result=list.set(0,"QQQ");
System.out.println(list);//[QQQ,QQQ,bbb,ccc]
System.out.println(result);//aaa
//获取
String s=list.get(0);
System.out.println(list);//[QQQ,QQQ,bbb,ccc]
System.out.println(s);//QQQ
	}
}

Set系列集合

1.无序:存取顺序不一致
2.不重复:可以去除重复
3.无索引:没有带索引的方法,不能使用普通for循环遍历,也不能通过索引来获取元素
Set集合的实现类
1.HashSet:无序,不重复,无索引
2.LinkedHashSet:有序,不重复,无索引
3.TreeSet:可排序,不重复,无索引

Set接口中的方法基本上与Collection是API一致

HashSet底层原理
1.采取哈希表存储数据
2.哈希表是一种对于增删改查性能都比较好的结构
哈希值(对象的整数表现形式)
1.根据hashCode方法算出来的int类型的整数
2.该方法定义在Object中,所有对象都可以调用,默认使用地址值进行计算
3.一般情况下,会重写hashCode方法,利用对象内部的属性值进行计算哈希值
对象的哈希值特点
1.如果没有重写hashCode方法,不同对象计算出的哈希值是不同的
2.如果已经重写hashCode方法,不同的对象只要属性相同,计算胡德哈希值就是一样的
3.在小部分情况下,不同属性值或者不同的地址值计算出来的哈希值也有可能是一样的,叫做哈希碰撞
4.HashSet是利用什么机制保证数据去重的?
HashCode方法(得到哈希值,从而确定当前元素师添加在数组的哪个位置)和equals方法(比较对象内部的属性值是否一致)
如果存储的是自定义对象,一定要重写这两个方法
LinkedHashset底层原理
1.有序(存储和取出的元素顺序一致),不重复,无索引
2.原理:底层数据结构依然是哈希表,只是每个元素又额外多了一个双链表的机制记录存储的数据
3.如果要数据去重,默认使用HashSet,如果要求去重且存取有序,才使用LinkedHashSet
TreeSet的特点
1.不重复,无索引,可排序(按照元素的默认规则[由小到大]排序)
2.底层是基于红黑树的数据结构实现排序的,增删改查性能都较好
TreeSet集合默认的规则
1.对于数值类型,Intrger,Double,默认按照从小到大的顺序进行排序
2.对于字符,字符串类型,按照字符在ASC||码表中的数字升序进行排序,字符串是从第一个字母开始比较(a,b,c…),第一个一样再比第二个,与字符串长度无关

Map

单列集合与双列集合
1.单列集合:一次只能添加一个元素
2.双列集合:一次可以添加两个(一对)元素
(1)左边是”键”,右边是”值”,一一对应
(2)一个键+一个值整体称为”键值对”/”键值对对象”/”Entry对象”
(3)键不能重复,只可以重复
Map的常见API
在这里插入图片描述
put方法细节:
1.再添加数据的时候,如果建不存在,那么直接把键值对对象添加到Map集合当中,方法返回null
2.再添加数据的时候,如果键已经存在,会把原有的键值对对象覆盖,会把被覆盖的值返回

//创建集合
Map<String,String> m=new HashMap<>();
//添加元素
String result1=m.put("郭靖","黄蓉");
System.out.println(result1);//null
m.put("韦小宝","木建平");
m.put("尹志平","小龙女");
String result2=m.put("韦小宝","双额");
//打印集合
System.out.println(m);//{韦小宝=木建平, 尹志平=小龙女, 郭靖=黄蓉}
System.out.println(result2);//木建平



String result=m.remove("郭靖");
System.out.println(result);//黄蓉
//打印集合
System.out.println(m);//{韦小宝=木建平, 尹志平=小龙女}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值