初学者集合浅析

初学者的部分理解:有错还望指出QQ:1074953453,需求备注

总结写在前面:

部分集合关系

巧记:
1.凡是涉及Set集合均保证了数据的唯一性(不重复)
2.凡是涉及List数据均可重复,线程不安全(Vector除外)
3.凡是涉及到map集合,均有键值对(key-value)模式

巧记:
1.凡是涉及到Linked,底层数据结构均靠链表实现(双向链表)优点是:跟新插入效率高,缺点是:查询效率低
2.凡是涉及到hash,底层数据结构的存储均靠哈希表实现,具体由hashCode()方法和equals()方法,这两个方法一般同时去重写
3.凡是涉及到Tree,底层数据结构均靠红黑树实现(平衡二叉树,且数据存储时按照自然排序或者实现Comparable排序)

补充:底层维护数组的数据结构,查询效率高

ArrayList集合
底层实现由数组实现
具有List的特点:1.不保证数据的唯一性 2.线程不安全 3.效率高
重写equlas方法保证唯一性(每个实体都要具体对待)

Person类中的方法重写

// An highlighted block
	@Override
	public boolean equals(Object obj) {
		if (obj == this) {
			return true;
		}
		if (! (obj instanceof Person)) {
			try {
				throw new Exception("输入类型错误");

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		Person p = (Person)obj;
		return this.name.equals(p.name)&&this.age==p.age;
	}
	

Test类中测试完整过程

// An highlighted block
package TestHashSet;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListTest {

	
	public static void main(String[] args) {
		ArrayList<Person> al = new ArrayList<>(); 
		al.add(new Person("小一",10));
		al.add(new Person("小二",15));
		al.add(new Person("小三",13));
		al.add(new Person("小四",20));
		al.add(new Person("小一",10));//与第一个输入低数据相同
		for(Person person : al) {
			System.out.println(person);
		}
		System.out.println("====================");
		ArrayList as =  singleArrayList(al);
		for (Object object : as) {
			System.out.println(object);
		}
		
		
	}
	
	public static ArrayList singleArrayList(ArrayList<Person> al){
		ArrayList<Person> tmp = new ArrayList<>(); 
		Iterator<Person> it = al.iterator();
		
		while (it.hasNext()) {
			Person p = it.next();
			if (!tmp.contains(p)) {
				tmp.add(p);
			}
		}
		return tmp;
		
	}
	
}

运行结果如下:
在这里插入图片描述

LinkedhashSet

后者在前者上又实现了hash表的存储结构

底层实现由链表实现(双向链表)和哈希表确定存储顺序
具有set的特点:1.保证数据的唯一性 2.线程不安全 3.效率高
排序 :
// An highlighted block
package TestHashSet;

import java.util.ArrayList;
import java.util.LinkedHashSet;

public class LinkedHashSetTest {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList();
		list.add("a");
		list.add("b");
		list.add("a");
		list.add("c");
		list.add("a");
		System.out.println(list);
		
		System.out.println("---------");
		System.out.println("去除重复后:");
		LinkedHashSet<String>   s = new LinkedHashSet<>();
		s .addAll(list);//可以使用此方式实现集合类型转换
		
		System.out.println(s);
 		
	}
	
}

运行结果:

在这里插入图片描述

TreeSet集合
底层实现有平衡二叉树数据结构组成
具有Set的特点:1.保证数据的唯一性 2.线程不安全 3.效率高
排序 :可自动排序或者使用实现了Comparator的重写方法ComparaTo,进行排序
// An highlighted block
package TestHashSet;

import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {
		TreeSet<Integer> ts = new TreeSet<>();
		
		ts.add(10);
		ts.add(5);
		ts.add(1);
		ts.add(18);
		
		for (Integer integer : ts) {
			System.out.println(integer);
		}
	}
}

这是运行结构

TreeSet实现重写ComparaTof方法自动排序

Person类中的代码

// An highlighted block
public class Person implements Comparable<Person>{
	@Override
	public int compareTo(Person p) {
		//根据原方法的判断条件,只修改要判断的内容
		//比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。 
		if (this.age>p.age) {
			return 1;
		}else if(this.age<p.age){
			return -1;
		}
		
		return 0;
	}
}
// An highlighted block
package TestHashSet;

import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {
		TreeSet<Person> ts = new TreeSet<>();
//		
//		ts.add(10);
//		ts.add(5);
//		ts.add(1);
//		ts.add(18);
//		
//		for (Integer integer : ts) {
//			System.out.println(integer);
//		}
		ts.add(new Person("小一",10));
		ts.add(new Person("小二",15));
		ts.add(new Person("小三",13));
		ts.add(new Person("小四",20));
		
		for (Person p : ts) {
			System.out.println(p);
		}
		
	}
}

在这里插入图片描述

Map: key - value collection单列集合
1.Map的设计为一个接口
2.Map针对的是键和值由一定的映射关系
3.键应该是唯一的,无序的,由keySet()方法返回所有的Key,获得一个Set集合
4.值是可以重复的,由get方法调用返回所有的值,获得一个Collection
5.存储顺序取决于Key的数据结构

HashMap

底层原理数据结构仅对键有效,数据结构是哈希表
依赖于哈希算法

Map最大的区别是:key不可以重复,value可以重复
缺点!!!!!
会产生数值覆盖,类似于Set

// An highlighted block
package TestHashSet;

import java.util.LinkedHashMap;
import java.util.Set;

public class LinkedHashMapTest {
//练习
	
	public static void main(String[] args) {
		LinkedHashMap<String, Person> name = new LinkedHashMap<>();
		name.put("小刘",new Person("小刘",15));
		name.put("小刘",new Person("XX",15));
		Set set = name.entrySet(); 
		for (Object object : set) {
			System.out.println(object);
		}
		
	}
	
	
}

运行结果:
在这里插入图片描述

TreeMap
基于红黑树的NavigableMap实现。
该映射根据其键的自然顺序来排序,或者根据创建映射时提供的Comparator来进行排序
具体取决于使用的构造方法

特点:
键可排序,唯一
值可重复
底层数据结构是平衡的二叉树可排序,排序方式取决于自然排序和比较器排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值