java容器的深入浅出下

java容器的深入浅出下

在这里插入图片描述

set接口

set,满足集合的无序性,单一性,确定性Set判断两个对象相同不是使用"=="运算符,而是根据equals方法。也就是说,我们在加入一个新元素的时候,如果这个新元素对象和Set中已有对象进行注意equals比较都返回false,则Set就会接受这个新元素对象,否则拒绝。

set的子类

set最流行的子类有 HashSet,TreeSet下面将对两类进行详细介绍

HashSet

HashSet是Set接口的典型实现,HashSet使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。当向HashSet集合中存入一个元素时,HashSet会调用该对象的 hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值决定该对象在HashSet中的存储位置。
值得主要的是,HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法的返回值相等

HashSet set = new HashSet();
		//添加  去重  无序
		set.add("张三");
		set.add("赵柳");
		set.add("田七");
		set.add("李四");
		set.add("李四");
		System.out.println(set);

TreeSet

TreeSet的底层是由红黑树实现所以TreeSet是一个有序的集合,它的作用是提供有序的Set集合T

	    TreeSet set1 = new TreeSet(com);
		set1.add(new Person("李四",19,168));
		set1.add(new Person("卢妹妹",16,172));
		set1.add(new Person("廖廖",17,165));
		

上述代码执行会抛出一个类型转换异常因为没有指定元素排序的比较方法

解决办法:

1、内部比较器:需要在自定义类(Person)中实现Comparable接口,并重写接口中的compareTo方法

2、外部比较器:也称为自定义比较器使用任何一个实现类实现一个接Comparator,重写compare方法,方法的内部制定比较规则

Comparator<Person> com  = new Hehe();
	//Lambda 
	com  = (Person o1, Person o2)->{
		return o1.getHeight() - o2.getHeight();
	};
	TreeSet set1 = new TreeSet(com);
	set1.add(new Person("李四",19,168));
	set1.add(new Person("卢妹妹",16,172));
	set1.add(new Person("廖廖",17,165));

根据身高排序

Map接口

HashMap类

和HashSet集合不能保证元素的顺序一样,HashMap也不能保证key-value对的顺序。并且类似于HashSet判断两个key是否相等的标准一样: 两个key通过equals()方法比较返回true、 同时两个key的hashCode值也必须相等

下面将用代码演示HashMap的创建,添加以及遍历

Map<Integer,String> map = new HashMap();

map.put(1001,"张三");
map.put(1002,"李四");
map.put(1003,"王五");
map.put(1004,"赵六");

System.out.println(map.get(1001));
System.out.println(map.size());
map.remove(1003);
System.out.println(map);

System.out.println(".......遍历key............");
//map的遍历
//遍历key
Set<Integer> keyset = map.keySet();
for(Integer it:keyset){
    System.out.println(it+"..."+map.get(it));
}

System.out.println("........遍历values...............");
//遍历values
Collection<String> col = map.values();
for(String str:col){
    System.out.println(str);
}

System.out.println("............遍历键值对................");
//遍历键值对
Set<Map.Entry<Integer,String>> stt = map.entrySet();
for(Map.Entry<Integer,String> entry: stt){
    System.out.println(entry.getKey()+"..."+entry.getValue());
}

Collections

Collections

  • void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
  • 容器中存放的事自定义引用数据类型的数据,需要自己通过内部外部比较器指定比较规则
  • void shuffle(List) //对 List 容器内的元素进行随机排列
  • void reverse(List) //对 List 容器内的元素进行逆续排列
  • void fill(List, Object) //用一个特定的对象重写整个 List 容器
  • int binarySearch(List, Object)//采用折半查找的方法查找特定对象
  • 要求使用前先升序排序

四大接口

//四大接口
///**
// * 四大内置函数型接口
// * Consumer 消费性接口 (有来无回)
// * void accept(T t)
// * Predicate 段言型
// * boolean test(T t)
// * Function<T,R> 函数型接口
// * R apply(T t)
// * Supplier 供给型接口
// * T get()
// *
// */

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值