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; } }