Set 接口:
Set接口也是Collection 的一个子接口,它主要有两个实现类:HashSet 类和 TreeSet类。HashSet用的稍微多点
特点:集合中额对象不按特定的方式排序,不能保存重复的对象(重复了怎么弄得清),简单说就是可以存储一组唯一、无序对象。
HashSet 类:
特点:
1、查找效率高 ,按照Hash 算法进行存储数据。
2、集合内元素是无序排列的。
3、是非线程安全的,不能保持同步,多个线程同时访问或修改一个 HashSet,则必须通过代码来保证其同步
4、允许集合元素为 null
常用方法:
增加 boolean add(Object o) ,
删除所有 void clear()
删除指定 boolean remove(Object o)
返回数量 int size()
判断指定元素有没有 boolean contains(Object o)
判断集合中有没有元素 boolean isEmpty()
package com.obge.boge; import com.obge.model.Animal; import java.util.HashSet; import java.util.Set; public class HashSetStu { public static void main(String[] args) { Animal animal1 = new Animal("dog1",2,"n1"); Animal animal2 = new Animal("dog2",1,"n1"); Animal animal3 = new Animal("dog3",3,"n1"); Set hashSet = new HashSet(); hashSet.add(animal1); hashSet.add(animal2); System.out.println("元素中有:"+hashSet.size()+"个"); System.out.println("有没有animal3:"+hashSet.contains(animal3)); System.out.println("遍历所有"); for(Object obj:hashSet){ Animal animal = (Animal) obj; System.out.println(animal.getName()); } System.out.println("判断是否为空"+hashSet.isEmpty()); } }
存储顺序:
向HashSet 集合中存储元素时,会调用hashCode() 方法得到该对象的hashcode 值,根据该值决定该对象在HashSet中的位置。、
如果有两个元素通过equals() 方法比较返回的结果为true,但hashcode值不等,一样可以存储,并放到不同位置
遍历方法:
主要有三种:for循环遍历,使用增强型for循环遍历、使用Iterator 遍历
注意:
普通for() 循环通过get() 方法取出每个对象
Set 接口不能使用普通的for循环遍历,由于其不存在get() 方法,其他两种可以
List 接口三种都行
Iterator 接口:对集合进行迭代的迭代器,为集合而生
主要有两个方法:
hasNext() 判断是否存在下一个可访问的元素,如果仍有元素可以迭代,则返回true
next() 返回要返回的下一元素
凡是由Collection 接口派生而来的接口或类,都实现了iterate()方法,iterate()方法返回一个Iterator 对象