Collection(集合):容器,用于存放对象(引用类型。基本类型需要自动装箱) 查看
List(列表):元素有序,元素可以重复 (有索引)。 通过元素的equals()方法判断是否重复。 查看
Set(集):元素无序,不可重复 (没有索引)。 遍历只能用Iterator迭代器和增强for, 不能使用普通for遍历。 查看
ArrayList(数组列表): 查询快,增删慢。 查看
LinkedList(链表): 查询慢,增删快。查看
HashSet(哈希表): 查询快,增删慢。 (底层其实就是Map) 。 存放的引用类型需重写hashCode()和equals()方法。
LinkedHashSet(哈希链表): 查询慢,增删快。 有序的,存放顺序和取出顺序一致。 查看
Demo.java:
package cn.xxx.demo;
import java.util.HashSet;
import cn.xxx.demo.Person;
/*
* HashSet集合的自身特点:
* 底层数据结构,哈希表
* 存储,取出都比较快
* 线程不安全,运行速度快
*/
public class Demo {
public static void main(String[] args) {
/*HashSet<String> set = new HashSet<String>();
set.add(new String("abc"));
set.add(new String("abc"));
set.add(new String("bbc"));
set.add(new String("bbc"));
System.out.println(set);*/
//将Person对象中的姓名,年龄,相同数据,看作同一个对象
//判断对象是否重复,依赖对象自己的方法 hashCode,equals
HashSet<Person> setPerson = new HashSet<Person>();
setPerson.add(new Person("a",11));
setPerson.add(new Person("b",10));
setPerson.add(new Person("b",10));
setPerson.add(new Person("c",25));
setPerson.add(new Person("d",19));
setPerson.add(new Person("e",17));
System.out.println(setPerson);
}
}
Person.java(存放的引用类型重写hashCode()和equals()方法):
package cn.xxx.demo;
public class Person {
private String name;
private int age;
/*
* Person对象如果存放到HashSet集合中,必须重写hashCode()和equals()方法。
* HashSet集合存放对象,是根据对象的hashCode()值进行存放的。 两个对象的hashCode如果相同,然后判断是否equals,如果相同就是重复元素。HashSet集合不会存放重复元素
* hashCode()和equals()方法可以由Eclipse工具自动生成。
* 重写的原则:
* equals()为true的两个对象的hashCode必须相同。 通过equals()方法判断集合中的元素是否重复。
* hashCole()值相同的两个对象,equals()不一定为true。
*
* 8种基本数据类型对应的引用类型(8种包装类)以及String类型,已经自动重写了hashCode()和equals()方法。
*
*/
public int hashCode(){ // 重写hashCode()方法。
return name.hashCode()+age*55;
}
public boolean equals(Object obj){ // 重写equals()方法。
if(this == obj)
return true;
if(obj == null)
return false;
if(obj instanceof Person){
Person p = (Person)obj;
return name.equals(p.name) && age==p.age;
}
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(){}
public String toString(){
return name+".."+age;
}
}