set与list集合

list基本用法

java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
1 基本操作:

    public static void main(String[] args) {
        // 创建List集合对象
        List<String> list = new ArrayList<String>();
        
        // 往 尾部添加 指定元素
        list.add("小狗子");
        list.add("小猴子");
        list.add("小毛驴");
        
        System.out.println(list);
        // add(int index,String s) 往指定位置添加
        list.add(1,"没头脑");
        
        System.out.println(list);
        // String remove(int index) 删除指定位置元素  返回被删除元素
        // 删除索引位置为2的元素 
        System.out.println("删除索引位置为2的元素");
        System.out.println(list.remove(2));
        
        System.out.println(list);
        
        // String set(int index,String s)
        // 在指定位置 进行 元素替代(改) 
        // 修改指定位置元素
        list.set(0, "小鸡仔");
        System.out.println(list);
        
        // String get(int index)  获取指定位置元素
        
        // 跟size() 方法一起用  来 遍历的 
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        //还可以使用增强for
        for (String string : list) {
            System.out.println(string);
        }   
    }
}

2 list的常用子类ArrayList集合和LinkedList集合.
 ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
 LinkedList`集合数据存储的结构是链表结构。方便元素添加、删除的集合。LinkedList提供了大量操作的方法如:

  • public void addFirst(E e):将指定元素插入此列表的开头。
  • public void addLast(E e):将指定元素添加到此列表的结尾。
  • public E getFirst():返回此列表的第一个元素。
  • public E getLast():返回此列表的最后一个元素。
  • public E removeFirst():移除并返回此列表的第一个元素。
  • public E removeLast():移除并返回此列表的最后一个元素。
  • public E pop():从此列表所表示的堆栈处弹出一个元素。
  • public void push(E e):将元素推入此列表所表示的堆栈。
  • public boolean isEmpty():如果列表不包含元素,则返回true。
set集合

 Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
 HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。HashSet底层的实现其实是一个HashMap支持。HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法。
 LinkedHashSet与HashSet的区别是,它是链表和哈希表组合的一个数据存储结构。可以保证存储元素唯一和存取元素有序.

set集合存储不重复的元素的原理

 保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。之所以可以实现不重复, 这是因为set集合在调用add方法的时候,add方法会调用元素的hashCode和equal是方法.判断元素是否重复.
结论:两元素的哈希值相同,equals方法返回ture,则认定为元素相同.对应元素不会被存储到集合中,反之为元素不同,存储.
分析
 set.add(s1);
1)首先add方法会调用s1的hashCode方法, 计算字符串s1的哈希值(假设s1的哈希值为93672), 则会在集合中查找有没有哈希值为93672的元素,如果没有,则会把当前元素存储到集合中.
2)若发现集合中已经存在哈希值为93672这个元素, 则会产生哈希冲突.s1元素会继续调用equals方法进行比较,即s1.equals(相同哈希值的元素);若返回ture.则是两元素的哈希值相同,equals方法返回ture,判定为两元素相同.就不会把s1存储到对应的集合中.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容