day16

集合框架

在这里插入图片描述
集合特点:

  1. 用于存储对象的容器
  2. 集合的长度是可变的
  3. 集合中不可以存储基本数据类型值
  4. 集合容器不断向上抽取,就形成了集合框架,框架的顶层为Collection接口
    在这里插入图片描述
Collection的方法
  1. 添加:
  • boolean add(Object obj);添加对象obj,添加成功返回true,反之返回false
  • boolean addAll(Collection col);添加指定collection的所有元素
  1. 删除:
  • boolean remove(Object obj)
  • boolean removeAll(Collection col);移除两个集合中的相同元素
  • void clear();清空
  1. 包含:
  • boolean contains(obj)
  • boolean containsAll(col)
  • boolean isEmpty();是否有元素
  1. 获取:
  • int size();获取长度
  • Iterator iterator();取出元素,这是个接口
  • boolean retainAll(col);取两个collection的交集,与removeAll()的功能相反
  • Object[] toArray();将集合转换成数组
Iterator接口
  1. next();取元素
  2. boolean hasNext();
//
Collection coll = new ArrayList()
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
Iterator it = coll.iterator();
while(it.hasNext()){
  System.out.println(it.next());
}
for(Iterator it = coll.iterator(); it.hasNext();){
  System.out.println(it.next());
}
List接口
  1. 有序:存入和取出的顺序一致;
  2. 元素都有索引
  3. 元素可以重复

特有常见方法:

只有List具有增删改查四种功能
1. void add(index, element);
   void add(index, collection)
2. Object remove(index);
3. Object set(index, element);
4. Object get(index);
   int indexOf(obj);
   int lastIndexOf(obj);
   List subList(from, to)

List有三个主要子类对象:

  • Vector:内部是数组数据结构,是同步的,几乎不再使用
  • ArrayList:内部是数组数据结构,不同步,查询速度快,替代了Vector,如果是多线程需要同步,也不会使用Vector,而是在里面添加锁保证同步
  • LinkedList:内部是链表数据结构,不同步,增删速度快
LinkedList
LinkedList link = new LinkedList();
link.addFirst("abc1");
link.addFirst("abc2");//添加到头部
link.addFirst("abc3");
link.addLast("abc4");
link.getFirst();//获取第一个元素,如果链表为空,抛出异常
link.peekFirst();//获取第一个元素,链表为空则返回null
link.removeFirst();//获取并删除第一个元素
link.pollFirst();//链表为空返回
Set接口
  1. 元素不能重复
  2. 无序
  3. Set接口中的方法和Collection一致

两个主要子类对象:

  • HashSet:内部数据结构是哈希表,不同步,存储的数据唯一
  • TreeSet:可以对Set集合中的元素进行指定排序,不同步
哈希表

哈希表如何确定元素是否相同?

  1. 判断两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同。
  2. 判断哈希值是否相同,使用对象的hashCode()方法,判断内容是否相同,使用equals()方法。
HashSet hs = new HashSet();			
hs.add("a");
hs.add("b");
hs.add("c");
hs.add("a");		
Iterator it = hs.iterator();
while(it.hasNext()) {
		System.out.println(it.next());//输出结果是无序的,且无重复元素
}
//往HashSet存储自定义对象
HashSet hs = new HashSet();
hs.add(new Person("list1",27));
hs.add(new Person("list8",14));
hs.add(new Person("list6",34));
hs.add(new Person("list3",21));
//需要在Person类中覆盖Object的hashCode方法和equals方法
Iterator it = hs.iterator();
while(it.hasNext()) {
	Person p = (Person)it.next();
	System.out.println(p.getName()+":"+p.getAge());
}

不论是ArrayList还是HashSet,判断是否有重复元素,以及remove(),contains()等方法,核心都是equals方法

  • HashSet的子类LinkedHashSet实现了有序的功能
TreeSet
  • TreeSet判断元素唯一性的方式:根据比较方法的返回结果是否为0,为0则表示是相同元素,不存储
    两种排序方式:
  1. 让元素具备比较功能,实现comparable接口,覆盖compareTo()方法
  2. 让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare()方法,将该类对象作为参数传递给TreeSet集合的构造函数。
  3. 不想按照对象具备的自然顺序进行排序,或者对象不具备自然顺序时,选择构造比较器。
  4. 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值