第六天 List,Set和Collectrions

数据结构

  • 常见的数据结构有:栈、队列、数组、链表和红黑树。

栈(stack)

  • 先进后出
  • 只能从一端存取数据
  • pop
  • push

队列(queue)

  • 仅允许在表的一端进行插入,而在表的另一端进行删除。
  • 先进先出

数组(Array)

  • 查找快,增删慢
    – 地址值 = 首地址+数据类型宽度*索引值 ,所以查找快
    – 增删,需要先新建一个数据,赋值数据,数据位置的后移,和旧数组的销毁,所以增删慢

链表(LinkedList)

  • 查找慢,增删快。

List集合

List接口特点:

  • 它是一个元素存取有序的集合。
  • 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素
  • 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

List接口中常用方法

  • add(int index,element)
  • public E get(int index)
  • public E remove(int index)
  • public E set(int index, E element)

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接口

特点

  • 无序
  • 不重复复
  • 无索引,也没有索引的方法

HashSet

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

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

  • 哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的
  • HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一。

LinkedHashSet

  • 有序的HashSet

可变参数

  • 修饰符 返回值类型 方法名(参数类型… 形参名){ }
  • 修饰符 返回值类型 方法名(参数类型[] 形参名){ },同样是代表数组,但是在调用这个带有可变参数的方法时,不用创建数组(这就是简单之处),直接将数组中的元素作为实际参数进行传递,其实编译成的class文件,将这些元素先封装到一个数组中,在进行传递。这些动作都在编译.class文件时,自动完成了。

Collections

  • public static boolean addAll(Collection c, T… elements) :往集合中添加一些元素。

  • public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。

  • public static void sort(List list) :将集合中元素按照默认规则排序。

  • public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排序。

    那么我们采用的 public static void sort(List list) 这个方法完成的排序,实际上要求了被排序的类型需要实现Comparable接口完成比较的功能,

Comparator比较器

  • public int compare(String o1, String o2) :比较其两个参数的顺序。
public class Test1 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,1,100,300,250);
        Collections.sort(list, new Comparator<Integer>() {
            public int compare(Integer i1,Integer i2){
                return i2 - i1;
            }
        });
        System.out.println(list);
    }
}

简述Comparable和Comparator两个接口的区别

  • Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  • Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值