zoukankan      html  css  js  c++  java
  • Java集合

    List集合

    List接口当中的常用API方法:增删改查

    出了继承Collection接口当中的方法外,还增加了一些根据元素索引来操作集合的特定方法:

    • public void add(int index,E element):将指定的元素,添加到给定集合中的指定位置上

    • public E get(int index):根据指定的索引获取对应位置上的元素

    • public E remove(int index):通过索引删除索引对应位置上的元素

    • public E set(int index,E element) :在指定索引位置上替换成给定的元素,并且返回更新前的元素。

    LinkedList集合

      LinkedList集合数据存储的结构采用的是链表结构。方便元素的添加和删除操作。

      此外 【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。

    LinkedList是List的子类,List当中的方法LinkedList都是可以使用的。我们只了解LinkedList独有的方法,

    在开发当中,LinkedList集合也可以作为堆栈、队列结构使用(了解)

    Set接口

      继承自Collection接口,它与Collection接口中的方法基本一样,没有对Collection接口进行功能上的扩展,只是比Collection接口更加严格。与List接口不同的是,Set接口中的元素是无序的,并且都会以某种规则保证存入的元素不重复。

      Set接口有很多个子类,有两个重要子类:java.util.HashSetjava.util.LinkedHashSet集合

      Set集合没有索引,取出元素的方式可以采用:迭代器、增强for循环。

             Set<Integer> set=new HashSet<>();
            //set没有索引,可以用迭代器和增强for循环遍历。相同元素只能添加一次
            set.add(563);
            set.add(153);
            set.add(323);
            set.add(563);
            set.add(546);
            for (Integer b : set) {
                System.out.print(b+" ");//546 563 323 153 集合无序
            }        

    HashSet集合

      java.util.HashSet是Set接口的一个实现类,它存储的元素是不可重复的,并且元素都是无序的(存取顺序不一致)。

      java.util.HashSet底层的实现其实是一个java.util.HashMap支持的。

      HashSet是根据对象的哈希值来确定元素在集合当中的存储位置,因此它具有良好的存取和查找性能。保证元素唯一性的方式依赖于hashCodeequals方法

    HashSet集合存储数据的结构(哈希表)

    哈希值:是一个十进制的整数,由系统随机给出(对象地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据实际存储的物理地址)
    是顶级父类Object中的方法,可以获取对象的哈希值:int hashCode返回对象的哈希码值
    源码:public native int hashCode();
    native:调用本地操作系统中的方法
    HashSet集合存储数据的结构(哈希表)
    JDK1.8之前:哈希表=数组+链表
    JDK1.8之后:
    哈希表=数组+链表 数组初始容量16
    哈希表=数组+红黑树; 如果链表长度超过了8位,那么就会把链表换成红黑树,减少查找时间

    HashSet存储自定义类型的元素

       一般需要重写对象当中的hashCode和equals方法,建立自己的比较方式。才能保证HashSet集合中元素的唯一性。

    @Override
        public boolean equals(Object o) {
            if (o == null) {
                return false;
            }
            if (this == o) {
                return true;
            }
            // 向下转型 类型判断
            if (o instanceof Student) {
                Student student = (Student)o;
                // 同名同年龄的人为同一个人 true
                return student.getName().equals(name) && student.getAge() == age;
            }
            return false;
        }
    
        @Override
        public int hashCode(){
             // 使用Objects类中的hash方法
            return Objects.hash(name,age);
        }

    LinkedHashSet集合

      存进去的元素是没有顺序的而 LinkedHashSet底层是一个哈希表(数组+链表、红黑树)+链表 :多了条链表(存元素的存储的顺序),从而使元素有序

            LinkedHashSet<String> linked = new LinkedHashSet<>();
            linked.add("ass");
            linked.add("滴滴");
            linked.add("来了");
            linked.add("宝贝");
            System.out.println(linked);//[ass, 滴滴, 来了, 宝贝]    
  • 相关阅读:
    linux 进入 GNOME X 界面
    POJ 3436 ACM Computer Factory (拆点+最大流)
    学习:EF(Entity Framwork)结构【转】
    .net上传Excel,解析Excel,导出CSV
    在Handler里面使用Session
    如何用JavaScript判断访问的来源是电脑还是手机,是什么浏览器?
    ASP.NET List泛型分页代码 【转】
    ASP.NET MVC中实现多个按钮提交的几种方法【转】
    清空数据库所有表,所有存储过程SQL语句
    可以不被浏览器拦截的弹出窗口
  • 原文地址:https://www.cnblogs.com/9080dlb/p/14083520.html
Copyright © 2011-2022 走看看