日常记录-Java基础知识-集合框架

一、总体框架

Java集合框架位于java.util包中,Collection是Set和List的父类,Collections是工具类,提供了对集合进行排序、遍历等多种算法的实现。

二、ArrayList和HashSet

ArrayList: 有序简单来说就是放进去顺序和拿出来顺序一致,可重复 

HashSet: 无序简单来说放进去顺序和拿出来顺序不一定一致,不可重复

List<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("UI");
list1.add("H5");
list1.add("H5");
list1.add("aa");
for (String str : list1) {
   System.out.println(str);
}
System.out.println("-------------------");
Set<String> set = new HashSet<>();
set.add("Java");
set.add("UI");
set.add("H5");
set.add("H5");
set.add("aa");
for (String str : set) {
   System.out.println(str);
}

jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来,例如:

ArrayList list = new ArrayList<>();

二、ArrayList和LinkedList区别

大致区别如下:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费时间为常数级,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动而LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费时间为常数级

三、队列

队列先进先出

LinkedList linkedList = new LinkedList();
linkedList.addLast("A");
linkedList.addLast("B");
linkedList.addLast("C");
linkedList.removeFirst();

四、Map 

一、Map接口:

1、Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。

2、Map中的集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对所对应的值。

3、Collection中的集合称为单列集合,Map中的集合称为双列集合。

4、Map中常用的集合为HashMap集合、LinkedHashMap集合。

需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

Set<Entry<String, String>> set =  map.entrySet();

二、Map接口中的常用方法:

三、Map集合遍历键找值方式 :

1、键找值方式:即通过元素中的键,获取键所对应的值

①、获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

②、遍历键的Set集合,得到每一个键

③、根据键,获取键所对应的值

public void test() {
    // 创建Map对象
    Map<String, String> map = new HashMap<String, String>();
    // 给map中添加元素
    map.put("喜羊羊", "美羊羊");
    map.put("灰太狼", "红太狼");
    map.put("懒羊羊", "零食");
    // 获取Map中的所有key
    Set<String> keySet = map.keySet();
    // 遍历存放所有key的Set集合
    Iterator<String> it = keySet.iterator();
    while (it.hasNext()) {
        String key = it.next();
        String value = map.get(key);// 通过key获取对应的value
        System.out.println(key + "=" + value);
    }
}

2、Map集合遍历键值对方式

通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

①、获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

②、遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象

③、通过键值对(Entry)对象,获取Entry对象中的键与值。

public void test() {
    // 创建Map对象
    Map<String, String> map = new HashMap<String, String>();
    // 给map中添加元素
    map.put("喜羊羊", "美羊羊");
    map.put("灰太狼", "红太狼");
    map.put("懒羊羊", "零食");
    // 获取Map中的所有key与value的对应关系
    Set<Map.Entry<String, String>> entrySet = map.entrySet();
    // 遍历Set集合
    Iterator<Map.Entry<String, String>> it = entrySet.iterator();
    while (it.hasNext()) {
        Map.Entry<String, String> entry = it.next();
        String key = entry.getKey();// 通过每一对对应关系获取对应的key
        String value = entry.getValue();// 通过每一对对应关系获取对应的value
        System.out.println(key + "=" + value);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值