ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-08-06 第二组刘禹彤 学习笔记

2022-08-06 21:06:56  阅读:178  来源: 互联网

标签:map 06 HashMap iterator 08 System 刘禹彤 println out


打卡26天

今天继续学习集合

 

 

###学习内容

LinkList

  • List:数据是有顺序(添加的先后顺序)的,数据可以重复
  • ArrayList:内部结构是数组,比较适合做高频率的查找,遍历

LinkedList:双向链表,比较适合做高频率的新增和删除

  • 我们在创建对象时使用的是多态(父类对象---子类引用

我们创建出来的对象只能调用父类和子类都有的方法

面试题:Collection和Map接口的区别Collection:存放单值的最大父接口;Map:存放对值的最大父接口面试题:ArrayList和LinkList的区别ArrayList:内部结构是数组,比较适合做高频率的查找,遍历;LinkList:双向链表,比较适合做高频率的新增和删除面试题:ArrayList和Vector的区别ArrayList和Vector,但ArrayList是线程异步的,不安全;Vector是线程同步的,安全

Collection接口

List:有顺序,元素可以重复,顺序指的是添加的先后顺序

set:没有顺序,元素不可以重复,顺序指的是添加的先后顺序

set其实是有顺序的,内部有一个专门排序的算法:1.所谓的无序不等于随机

2.所谓的无序指的是没有按照添加的先后顺

序,其实内部是做了排序的

实现类HashSet

Set集合如何确保数据不重复?

保证数据类型的类要重写hashCode和equals方法

面试题:List和set的区别List:有顺序,元素可以重复;Map:没有顺序,元素不可以重复

TreeSet

排序规则:要排序的对象的类必须实现comparable接口

LinkedHashSet

再添加数据的同时,会维护数据的添加顺序,效率要比HashSet略低一些

面试题:HashSet和LinkedHashSet的区别

比较接口

Comparable接口:自然排序

Comparator接口:临时排序

Map接口

1.存储对值K-V key-value

2.key不能重复,value可重复

3.没有顺序(添加的先后顺序)

HashMap内部存储结构

jdk1.7之前:链表+二叉树

jdk1.7及之后:链表+数组+红黑树

HashMap基本上面试90%问原理

Hashtable

Hashtable和HashMap几乎一模一样

面试题:Hashtable和HashMap区别2.HashMap的key是可以为null的,Hashtable是不可以为null的1.HashMap是线程异步,线程不安全;Hashtable是线程同步,线程安全的

Properties(属性)

Properties是Hashtable的子类,更多的是用来操作属性文件

集合的遍历

List集合的遍历

1.for循环

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

2.foreach语句

for (String s : list) {
    System.out.println(s);
}

3.迭代器

 Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()) {
            String s = iterator.next();
            iterator.remove();
//            System.out.println(s);
        }

 

Set集合的遍历

1.foreach语句(增强for循环)

for (Integer integer : set) {
    System.out.println(integer);
}


for (int i = 0; i < set.size(); i++) {


2.迭代器

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

Map集合的遍历

1for循环

Set<String> strings = map.keySet();
for (String s : strings) {
    System.out.println(s + "->" + map.get(s));
}

 

2.增强for循环

Set<String> strings = map.keySet();
Collection<String> values = map.values();

 

3.增强for循环

Entry是HashMap的一个内部类

每一组键值对就是一个Entry对象

Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
    System.out.print(entry.getKey() + "->");
    System.out.println(entry.getValue());}

4.迭代器

Set<String> strings = map.keySet();
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()) {
    String s = iterator.next();
    System.out.println(s + "->" + map.get(s));
}

 

其他的集合

1.LinkedHashMap,在HashMap的基础上维护了一个双向链表。

2.TreeMap:天然支持排序

3.Collections:Collections是一个工具类

迭代中删除元素

1.回调指针

for (int i = 0; i < names.size(); i++) {
    if(Objects.equals(names.get(i),"lucy")){
        names.remove(i);
        // 1.回调指针
        i--;
    }
    if("lucy".equals(names.get(i))){


    }
}

2.逆序遍历

for (int i = names.size() - 1; i >= 0; i--) {
    if(Objects.equals(names.get(i),"lucy")){
        names.remove(i);
    }
}

3.使用迭代器(推荐)

Iterator<String> iterator = names.iterator();
while(iterator.hasNext()) {
    String s = iterator.next();
    if(Objects.equals(s,"lucy")){
        iterator.remove();
    }
}

面试题:

线程安全问题: 迭代器是依赖于集合而存在,在判断成功以后,集合中新增了元素, 迭代器不知 道,所以就报错。

解决: 1.迭代器遍历元素,迭代器删除元素 2.普通for循环遍历,集合删除

###学习心得

今天把集合剩下的内容基本都学习完成,感觉知识点很多,需要记的东西也很多,代码量也逐渐上来了,要努力跟上老师的进度

###掌握情况:一般

###课上练习

public class Ch07 {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("1001","张岳");
        map.put("1002","赵红兵");
        map.put("1003","小北京");
        map.put("1004","李四");
        map.put("1004","张浩然");
        map.put("1005","张浩然");

        System.out.println(map);
        System.out.println(map.get("1003"));
        System.out.println(map.values());
        System.out.println(map.keySet());

    }
}

 

###运行结果

 

标签:map,06,HashMap,iterator,08,System,刘禹彤,println,out
来源: https://www.cnblogs.com/lyt0612/p/16557853.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有