List 和 Set 接口

一,前言

了解List和set接口下子类的同和异,掌握接口的常用方法

二,List集合

1.List集合的特点

  • 鉴于Java数组中用来存储数据的局限性,我们通常用List代替数组。

  • List集合中具有 元素有序,且可重复 的性质,集合中的每个元素都有其对应的顺序索引。

  • List接口实现类常用的有:ArrayList,LinkedList和Vector。

2.List集合常用方法

 void add(int index, E element)
     将指定的元素插入此列表中的指定位置。
 boolean addAll(int index, Collection<? extends E> c)
     将指定集合中的所有元素插入到此列表中的指定位置。
 E   remove(int index)
     删除该列表中指定位置的元素。
 Object get(int index)
     返回此列表中指定位置的元素。
 E   set(int index, E element)
     用指定的元素替换此列表中指定位置的元素。
 int indexOf(Object o)
     返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
 int lastIndexOf(Object o)
     返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
 List<E> subList(int fromIndex, int toIndex)
     返回此列表中指定的 fromIndex (含)和 toIndex之间的视图。

3.List集合遍历

  • 迭代器遍历

    public static void main(String[] args) {
         List<String> list = new ArrayList();
         list.add(new String("book001"));
         list.add(new String("book002"));
         list.add(new String("book003 "));
         String value = null;
         Iterator iter = list.iterator();
         while (iter.hasNext()) {
             value = (String)iter.next();
             System.out.println(value);
         }
     }
  • for循环遍历

     public static void main(String[] args) {
         List<String> list = new ArrayList();
         list.add(new String("book001"));
         list.add(new String("book002"));
         list.add(new String("book003 "));
         String value = null;
         Iterator iter = list.iterator();
        for(i = 0;i<list.size();i++){
             value = (String)list[i];
             System.out.println(value);
        }
  • 增强 for (foreach) 循环遍历

   public static void main(String[] args) {
         List<String> list = new ArrayList();
         list.add(new String("book007"));
         list.add(new String("book008"));
         list.add(new String("book009"));
         String value = null;
         for (String books:list) {
             value = books;
             System.out.println(value);
         }
     }

4.list集合总结

  • List 中元素是有序的,元素可以重复,因为该集合体有索引。

 ArrayList:
     作为List接口的主要实现类,线程不安全,效率高,底层使用Object[] elementData。
 LinkedList:
     对于频繁的插入,删除操作,使用比ArrayList效率搞,底层使用双向链表存储。
 Vector:
     作为List接口的古老实现类,线程安全,效率低,底层使用Object[] elementData。

三,Set集合

1.Set集合的特点

  • Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败

  • Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法。

2.HashSet集合

HashSet特点:

  • HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。

  • HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。

  • HashSet 具有以下特点:

      • 不能保证元素的排列顺序

      • HashSet 不是线程安全的(异步)

      • 集合元素可以是null

HashSet存储原理:

  • HashCode() 获取哈希码,也称散列码;实际是返回一个int整数。作用是确定该对象在哈希表中的索引位置,Java的任何类都包含有hashCode() 函数。

  • 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法,获取哈希值,然后根据 值决定该对象在 HashSet 中存储位置。

  • 如果两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相等,hashSet 将会把它们存储原有元素指向下面的位置,但依然可以添加成功。

注:测试重写 equals和hashCode方法,存储对象。

3.TreeSet集合

HashSet特点:

  • TreeSet基于TreeMpa实现,TreeMap本质就是红黑树。所以TreeSet其实于是基于红黑树的。

  • TreeSet有个特点,插入无序内部有序。

  • 插入数据实现Comparable接口,通过compareTo方法去比较大小,或者在实力化TreeSet的时候自定义排序Comparator方法。内部的int compare(T o1, T o2)比较对象大小。

TreeSet集合排序:

 插入实现Comparable接口重写类方法:
 (Comparable接口,compareTo方法)
 public class Person implements Comparable<Person>{
     @Override
     public int compareTo(Person o) {
         // TODO Auto-generated method stub
         return this.age - o.age;
     }
 }
 ​
 实力化TreeSet自定义排序Comparator方法:(如按类的年龄排序)
 (Comparator方法,compare(T o1, T o2))
 public void test(){
     Comparator com = new Comparator(){
         @Override
         public int compareTo(Person o1,Person o2) {
             if(o1 instanceof User && o1 instanceof User){
                 User u1 = (User)o1;
                 User u2 = (User)o2;
                 return Integer.compare(u1.getAge(),u2.getAge())
             }else{
                 throw new RuntimeException("输入的数据类型不匹配")
             }
             TreeSet ts = new TreeSet(com);
         }
     }
 }

4.Set集合遍历

迭代器遍历,foreach遍历;

5 .Set集合总结

  • 不允许存储重复的元素

  • 没有索引

 HashSet:  
     不允许存储重复的元素  
     没有索引,没有带索引的方法,也不能使用普通的for循环遍历  
     是一个无序的集合,存储元素和取出元素的顺序有可能不一致 
     底层是一个哈希表结构(查询的速度非常的快)
 ​
 treeSet:
     数据类型必须是一致的
     读取的结果,是按照两种的方法或默认进行排序的输出的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值