java集合框架笔记(1)

Set和List的区别

  • Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。

  • List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。

多线程不用ArrayList,LinkedList需要线程同步。

HashSet :该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。

Vector:该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍。

Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

Hashtable 是 Dictionary(字典) 类的子类,位于 java.util 包中。

Properties 继承于 Hashtable,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串

IDEA 中,对可迭代遍历输入.for 可以快捷生成for-each代码片段;

对集合实例使用iterator() 即可获得迭代器,用于遍历或删除元素。

package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Description: TODO
 * @author: HardyDragon
 * @date: 2021年06月06日 16:34
 */
public class Test02 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);

        // for -each 遍历
        for (Integer i : list) {
            System.out.println(i);
        }

        System.out.println("---------------");

        // 不用使用int[] ,toArray 返回的是 object[] 数组
        Integer[] arr = new Integer[list.size()];
        list.toArray(arr);
        for (Integer i : arr) {
            System.out.println(i);
        }

        System.out.println("---------------");

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

1
2
3
---------------
1
2
3
---------------
1
2
3

map 映射
map映射的变量使用 entrySet() 返回一个包含所有键值对 的 set集合。

public void formap() {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "人");
        map.put(2, "天");
        map.put(3, "地");

        // 对keySet() 进行for-each遍历,两次遍历
        for (Integer key : map.keySet()) {
            System.out.println("key:" + key + " and value:" + map.get(key));
        }

        System.out.println("-------------------");

        // 使用entrySet() 生成 Map.Entry() 再是生成其迭代器
        Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.println("key:" + entry.getKey() + " and value:" + entry.getValue());
        }

        System.out.println("-------------------");

        // 简化第二种迭代器方法;
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println("key:" + entry.getKey() + " and value:" + entry.getValue());
        }

        System.out.println("-------------------");

        // 只能遍历所有的 value ,不能看到key
        for (String value : map.values()) {
            System.out.println("value:" + value);
        }
    }
key:1 and value:人
key:2 and value:天
key:3 and value:地
-------------------
key:1 and value:人
key:2 and value:天
key:3 and value:地
-------------------
key:1 and value:人
key:2 and value:天
key:3 and value:地
-------------------
value:人
value:天
value:地

集合是一个对象,可容纳其他对象的引用。集合接口声明对每一种类型的集合可以执行的操作。

集合框架的类和接口均在java.util包中。

任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。任何对象没有使用泛型之前会自动转换Object类型,使用泛型之后不用强制转换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值