java学习之list集合、Set集合及常用函数

public class List{
    public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
//        list集合可以存储重复元素
        System.out.println(list);
        System.out.println("-----------------------------------");
//        list集合在指定位置添加元素
        list.add(2,"nana");
        System.out.println(list);
        System.out.println("-----------------------------------");
/*//        remove方法
        String s1 = list.remove(3);
        System.out.println(s1);
        System.out.println(list);
        System.out.println("-----------------------------------");*/
//         set方法
        list.set(2,"yoyo");
//        get方法
        String s = list.get(2);
        System.out.println(s);
        System.out.println(list);
        System.out.println("-----------------------------------");
//        遍历list集合,三种方式
//        普通for循环
        for(int i=0;i it = list.iterator();
        while(it.hasNext()){
            String next = it.next();
            System.out.println(next);

        }

    }
}

1、List集合的特点:继承了Collection接口;有序的集合,存储和取出的顺序是一样的;有索引;与set不同,允许存储重复的元素。

操作索引时候,一定要注意防止索引越界异常。

2、set:不允许存储重复的元素,没有索引,没有带索引的方法,也不能使用普通的for循环遍历,可以用迭代器遍历和增强for循环;

3、Hashset:底层是一个哈希表结构(查询的速度非常的快),无序集合(存储元素和取出元素的顺序有可能不一致),不是同步的(多线程)

存储数据的结构:哈希表

哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是实际存储的物理地址)

在Object类中有一个方法,可以获取对象的哈希值。hashcode()返回对象的哈希码值,就是一个整数

数组结构:把元素进行了分组(相同哈希值的元素是一组),链表/红黑树结构把相同哈希值的元素连在一起。

两个元素不同,但是相同哈希值,叫做哈希冲突。

jdk1.8之前,哈希表是数组+链表。jdk1.8之后,哈希表=数组+红黑树/链表(提高查询的速度),如果链表长度超过了8位,就转换成红黑树。

4、set集合不允许存储重复元素的原理:set集合在调用add方法时,会调用元素的hashcode方法,计算哈希值。和equals方法,判断元素是否重复。

Hashset存储自定义类型元素,如果想做到元素唯一,必须要重写hashcode方法和equals方法。

5、sort方法使用的前提:被排序的集合里边存储的元素,必须实现comparable,重写接口中的方法compareto定义排序的规则。并且接口的排序规则,如果是自己(this)减去参数就是升序,反之亦然

还有一个compartor,二者的区别就是:comparable是自己(this)和别人(参数)比较,自己需要实现comparable接口,重写比较的规则compareto方法。comparator是相当于找一个第三方的裁判,比较两个。return o1-o2;就是升序(前减后)

你可能感兴趣的:(java学习之list集合、Set集合及常用函数)