java 集合类

Collection:  数组,List,Set,Vector,Stack,Queue等

ArrayList 和LinkList 都是线程不安全的。Vector也是基于数组,但是线程安全的,但开销也大,一般不用。

Set 集合里面的元素不重复,其中TreeSet 是对已经存在的对象逐一通过compareTo方法进行比较,如果返回是0,说明对象相等,就不会放入Set。但对于HashSet,不仅要靠CompareTo方法,更要靠equals 和hashCode方法。

import java.util.Set;
import java.util.TreeSet;

public class Student implements Comparable{
	private int id;
	public Student(int id){
		this.id=id;
	}
	public int getId(){
		return id;
	}
	public boolean equals(Student stu){
		if(stu.getId() == this.getId())
			return true;
		else
			return false;
	}
	@Override
	public int compareTo(Object obj) {
		// TODO Auto-generated method stub
		//该方法是实现接口Comparable里的方法
		if(obj instanceof Student){
			Student s = (Student)obj;
			if(s.getId()== this.id)
				return 0;
			else{
				return this.id > s.getId() ?1:-1;
			}
		}
		else
			return 0;
	}
	public static void main(String args[]){
		Set stuSet = new TreeSet();
		Student s1 = new Student(1);
		Student s2 = new Student(1);
	    stuSet.add(s1);
	    stuSet.add(s2);
	    System.out.println(stuSet.size());//输出结果1
	}
}

TreeSet 是SortedSet接口的唯一实现类,使用二叉树存储数据的方式来保证存储的元素处于有序状态。

HashSet 和linkedHashSet 是基于哈希表(hash)实现的,非线程安全,当插入时会调用该对象的hashCode()方法,来得到该对象的hashCode值,根据该hashCode值来决定该对象在HashSet 中的存放位置,如果遇到两个对象的hashCode一样,怎不允许重复插入。HashSet 不能保证插入次序和遍历次序一致。相比之下,LinkedHashSet同样是基于Hash表,他同时采用了链表的方式来保证插入的次序和遍历的次序一致。

----------------------------------------------------------------------------------

HashMap 对象查找:是通过Hash表来实现的。在放入key的时候,会计算key的hash函数值,这个值作为内存地址来放value,如果有两个key的值得到了同样的hash值,hashMap对象采用“链地址法”的方法,即为所有Hash值是i的对象建立一个同义词链表。重写equals 必修要重写hashCode方法。https://www.cnblogs.com/chengxiao/p/6059914.html 有具体描述

你可能感兴趣的:(java)