Java进阶——java基础(一):集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36981814/article/details/85068086

一、什么是集合?

集合类存放于java.util包中。

集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。

通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器。

 

二、集合的类型与各自的特性

1.单例集合

1.1  Collection:单例集合的根接口

    1)List:有存储数据,可重复

Array List:数组实现, 查找快, 增删慢。原因:由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快。

Vector:和ArrayList原理相同, 但线程安全, 效率略低。原因:和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低。

Link List:链表实现, 增删快, 查找慢。原因:由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低。

    2)Set:无存储数据,不可重复

HashSet:线程不安全,存取速度快。底层是以哈希表实现的。

TreeSet:红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。

 

1.2  HashSet存储元素的原理:

往hashSet添加元素的时候,首先会调用元素的hashCode方法得到元素的哈希码值,然后把哈希码值经过运算算出该元素存在哈希表中的位置。

  • 如果算出的位置目前还没有存在任何的元素,那么该元素可以直接添加到哈希表中。
  • 如果算出的位置目前已经存在其他的元素,那么还会调用元素 的equals方法再与这个位置上 的元素比较一次。
    • 如果equals方法返回的是true,那么该元素被视为重复元素,不允许添加。
    • 如果equals方法返回的是false,那么该元素也可以被添加。

 

2.双列集合

Map:键值对 键不可重复,键可以重复

HashMap:线程不安全,存取速度快。底层是以哈希表实现的。

TreeMap:红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。

HashTable:底层也是使用了哈希表 维护的,存取的读取快,存储元素是无序的。

 

三、集合的遍历

1.遍历集合的几种方式

  1. 使用迭代器Iterator的方式。
  2. 使用增强for循环的方式。
  3. 如果有下标,则可以使用下标的方式。

2.遍历代码实现

  • 遍历数组
        //创建数组
        String[] sArry = new String[]{"a1", "b2", "c3"};
        //增强for循环遍历数组
        for (String alt : sArry)
            System.out.println(alt);
        //使用下标遍历数组
        for (int i = 0; i < sArry.length; i++)
            System.out.println(sArry[i]);
  • 遍历List
        //创建List集合
        List<String> list = new ArrayList<>();
        list.add("aa1");
        list.add("bb2");
        list.add("cc3");
        //增强for循环遍历list集合
        for (String elt : list)
            System.out.println(elt);
        //使用下标遍历list集合
        for (int i = 0; i < list.size(); i++)
            System.out.println(list.get(i));
        //迭代器Iterator遍历list集合
        for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) {
            String elt = iter.next();
            System.out.println(elt);
        }
  • 遍历Set
        //创建set集合
        Set<String> set = new HashSet<>();
        set.add("aaa1");
        set.add("bbb2");
        set.add("ccc3");
        //增强for循环遍历set集合
        for (String rlt : set)
            System.out.println(rlt);
        //迭代器Iterator遍历set集合
        for (Iterator<String> iterator = set.iterator(); iterator.hasNext(); ) {
            String rlt = iterator.next();
            System.out.println(rlt);
        }
  • 遍历Map
        //创建Map集合
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "a123");
        map.put("2", "b123");
        map.put("3", "c123");
        //增强的for循环(Entry集合)
        for (Map.Entry<String, String> entry : map.entrySet())
            System.out.println(entry);
        //增强的for循环(Key集合)
        for (String key : map.keySet())
            System.out.println(key + "=" + map.get(key));
        //遍历值的集合
        for (String values : map.values())
            System.out.println(values);

猜你喜欢

转载自blog.csdn.net/qq_36981814/article/details/85068086