美文网首页
Java学习Day10

Java学习Day10

作者: JayMeWangGL | 来源:发表于2019-09-26 12:21 被阅读0次

今日学习内容总结

  • List集合
  • LinkedList集合
  • Set接口
  • HashSet接口
  • 哈希表
  • 可变参数
  • Collections

List集合

List接口特点:

  1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
  2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
  3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

List接口中常用方法:

  • 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不能使用多态
特点:

  • 1、查询慢,增删快
  • 2、包含了大操作首尾元素的方法

常用方法:

  • 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需要在自定义的类中添加equals和hashCode方法

特点:

  • 1、不允许存储重复的元素
  • 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历

HashSet集合

特点:

  • 1、不允许存储重复的元素
  • 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历
  • 3、是一个无序的集合,存取元素的顺序有可能不一致
  • 4、底层是一个哈希表结构(查询的速度非常快)

哈希表

特点:哈希表存储采用数组+链表+红黑树实现,查询速度快

  • 哈希值:是一个十进制的证书,由系统随机给出(对象的逻辑地址值)
        使用Object中的hashCode方法可以得到哈希值

  • 创建:HashSet<String> hashSet=new HashSet<>();

  • HashSet存储自定义类型元素必须重写hashCode和equals方法

  • 结构:


    哈希表

LinkedHashSet集合

特点:底层是一个哈希表,多了一个链表(记录元素的存储顺序),保证元素有序,不允许重复


可变参数

  • 可变参数的原理:
       可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数(传递的参数可以是0个或者多个)
  • 使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以用可变参数
  • 使用格式:
        修饰符 返回值类型 方法名(参数类型... 形参名){ }
    等价于:修饰符 返回值类型 方法名(参数类型[] 形参名){ }
    例子:
    public static void main(String[] args) {
        System.out.println(add(3,5,8));
    }

    public static int add(int...a){
        int sum=0;
        for (int i : a) {
            sum+=i;
        }
        return sum;
    }
  • 注意事项:
        1、一个方法的参数列表,只能有一个可变参数
        2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾

可变参数的终极写法:修饰符 返回值类型 方法名(Object...obj){ }


Collections

常用方法:

  • public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。
        ArrayList<String> arrayList=new ArrayList<>();
        Collections.addAll(arrayList,"d","y","z");
  • public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
        Collections.shuffle(arrayList);
  • public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
        Collections.sort(arrayList);

注意:如果要排序自定义类元素,被排序的集合里存储的元素,必须实现Comparable,重写接口中的compareTo方法的排序规则(this - 参数为升序排序)

  • public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。
        Collections.sort(people, new Comparator<Person>() {
           @Override
           public int compare(Person o1, Person o2) {
               return o1.getAge()-o2.getAge();
           }
        });

Comparator和Comparable的区别:
    1、Comparable:this和参数比较,自己需要实现Comparable接口,重写compareTo方法
    2、Comparator:相当于找一个第三方的裁判进行比较

相关文章

网友评论

      本文标题:Java学习Day10

      本文链接:https://www.haomeiwen.com/subject/syequctx.html