• 对ArrayList集合、Iterator 迭代器、LinkedList 链表、HashMap散列表的基础认识


    ArrayList集合

    • 它是提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
    • 它的特点是:底层是数组实现的,长度可变
    • 添加数据的时候不需要考虑索引,默认将数据添加到末尾

    ArrayList类常用的方法

    构造方法:public ArrayList()  创建一个空的集合对象

    成员方法

    add(E e)将指定的元素添加到此列表的末尾
    add(int index,E element)在此列表中的指定位置插入指定的元素
    addAll(Collection c)按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾

    示例代码:

    1. public static void main(String[] args) {
    2. // add(E e) 将指定的元素追加到此列表的末尾。
    3. // add(int index, E element) 在此列表中的指定位置插入指定的元素。
    4. ArrayList arrayList=new ArrayList<>();
    5. arrayList.add("1");
    6. arrayList.add("2");
    7. arrayList.add("3");
    8. arrayList.add(1,"4");
    9. System.out.println(arrayList);
    10. // addAll(Collection c) 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。(在这里使用)
    11. ArrayList arrayList1=new ArrayList<>();
    12. arrayList1.add("11");
    13. arrayList1.add("22");
    14. arrayList.addAll(arrayList1);
    15. System.out.println(Arrays.toString(new ArrayList[]{arrayList}));
    16. }
    17. }
    18. //运行结果:[1, 4, 2, 3]
    19. // [[1, 4, 2, 3, 11, 22]]
    clear()从列表中删除所有元素
    contains(Obiect o )如果此列表中包含指定的元素,则返回true
    set(int index,E element)用指定的元素替换此列表中指定的元素
    remove(int index)删除该列表中指定位置的元素
    remove(Object o)从列表中删除元素的第一个出现(如果存在)

    示例代码:

    1. public static void main(String[] args) {
    2. //clear() 从列表中删除所有元素。
    3. ArrayList arrayList=new ArrayList<>();
    4. arrayList.add("1");
    5. arrayList.add("2");
    6. arrayList.add("3");
    7. arrayList.add(1,"4");
    8. arrayList.clear();
    9. System.out.println(arrayList);
    10. }
    11. //运行结果:没有输出
    12. public static void main(String[] args) {
    13. //contains(Object o) 如果此列表包含指定的元素,则返回 true 。
    14. ArrayList arrayList=new ArrayList<>();
    15. arrayList.add("1");
    16. arrayList.add("2");
    17. arrayList.add("3");
    18. arrayList.add(1,"4");
    19. System.out.println(arrayList.contains("3"));
    20. }
    21. //运行结果:true
    22. public static void main8(String[] args) {
    23. //set(int index, E element)用指定的元素替换此列表中指定位置的元素。
    24. ArrayList arrayList = new ArrayList<>();
    25. arrayList.add("1");
    26. arrayList.add("2");
    27. arrayList.add("3");
    28. arrayList.add("4");
    29. arrayList.add("5");
    30. //remove(int index)删除该列表中指定位置的元素。
    31. //remove(Object o)从列表中删除指定元素的第一个出现(如果存在)。
    32. System.out.println(arrayList.set(2,"6));
    33. System.out.println(arrayList.remove(2));
    34. System.out.println(arrayList.remove("5"));
    35. System.out.println(arrayList);
    36. }
    iterator()以正确的顺序返回该列表中的元素的迭代器
    listIterator返回列表中的列表迭代器
    list Iterator(int index)从列表中的指定位置开始,返回列表中的元素(按正确顺序的列表迭代器
    indexOf(Object o)返回此列表中指定元素的第一次出现的索引,如果此列表中不包含元素,则返回-1
    lastIndexOf(Object o)返回此列表中指定元素的最后依次出现的索引,如果此列表不包含元素,则返回-1

    示例代码:

    1. public static void main(String[] args) {
    2. //iterator()以正确的顺序返回该列表中的元素的迭代器。
    3. // listIterator()返回列表中的列表迭代器(按适当的顺序)。
    4. //listIterator(int index)从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。
    5. //indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
    6. //lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
    7. ArrayList arrayList = new ArrayList<>();
    8. arrayList.add("1");
    9. arrayList.add("2");
    10. arrayList.add("3");
    11. arrayList.add("4");
    12. arrayList.add("5");
    13. System.out.println(arrayList.iterator());
    14. System.out.println(arrayList.listIterator());
    15. System.out.println(arrayList.listIterator(1));
    16. int i= arrayList.indexOf("4");
    17. int j= arrayList.lastIndexOf("3");
    18. System.out.println(i);
    19. System.out.println(j);
    20. }
    toArray() 以正确的顺序(从第一个到最后一个元素—)返回一个包含此列表中所有元素的数组
    subList(int fromIndex, int toIndex)返回此列表中指定的fromIndex(包括)和toIndex之间的独占视图
    isEmpty()如果此列表中不包含元素,则返回true

    示例代码:

    1. public static void main(String[] args) {
    2. //toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
    3. //subList(int fromIndex, int toIndex)返回此列表中指定的 fromIndex (包括)和 toIndex之间的独占视图。
    4. //isEmpty()如果此列表不包含元素,则返回 true 。
    5. ArrayList arrayList = new ArrayList<>();
    6. arrayList.add("1");
    7. arrayList.add("2");
    8. arrayList.add("3");
    9. arrayList.add("4");
    10. arrayList.add("5");
    11. System.out.println(arrayList);
    12. Object[] objects=arrayList.toArray();
    13. System.out.println(objects);
    14. System.out.println(arrayList.toArray().length);
    15. System.out.println(arrayList.subList(0,3));
    16. System.out.println(arrayList.isEmpty());
    17. }

    Iterator迭代器

    • 它是Java集合框架的一种机制,是一种遍历集合(如列表、集合和映射等)的接口
    • 它提供一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。
    • 它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合
    • Java Iterator迭代器是一种单向遍历机制,只能从前往后遍历集合中的元素,不能往回遍历
    • 同时,在使用迭代器遍历集合是,不能直接修改集合中的元素,可能会导致ConcurrentMOdificationException异常,解决方法是:使用迭代器中的remove()方法来删除当前元素,亦或者建立一个集合,记录需要删除的元素,之后统一删除,亦或者不使用Iterator迭代器遍历

    Iterator迭代器常见使用方法

    next()用来返回迭代的下一个元素,并把指针向后移动一位
    hasNext()用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代
    remove()从集合中删除最后访问的元素

    示例代码:

    1. public static void main(String[] args) {
    2. //迭代器
    3. ArrayList arrayList = new ArrayList<>();
    4. arrayList.add("1");
    5. arrayList.add("2");
    6. arrayList.add("3");
    7. arrayList.add("4");
    8. //返回迭代器
    9. Iterator iterator = arrayList.iterator() ;
    10. //使用hasNext()是否有下一个元素 next取出下一个元素
    11. //while循环
    12. while(iterator.hasNext()){
    13. System.out.print(iterator.next()+" ");
    14. }
    15. }

    这里首先集合获取迭代器使用Iterator()方法,让迭代器iterator逐个返回集合中所有元素最简单的方法是是使用while循环

    LinkedList链表

    • 链表(Linked list) 是一种常见的基础数据结构,是一种线性表,但是并不按照线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址
    • 链表分单向链表和双向链表,它是一种数据容器
    • 它与ArrayList 相比,LinkedList更加擅长增加和删除的操作

    LinkedList链表常见方法

    (添加)void addFirst(E e)在此列表的开头插入指定的元素
    (添加)void addLast(E e)将指定元素追加到此列表的末尾
    (获取)getFirst()返回此列表的第一个元素
    (获取)getLast()返回此列表中的最后一个元素
    (弹出栈结构)pollFirst()检索并删除此列表的第一个元素,如果此列表为空,则返回null
    (弹出栈结构)pollLast()检索并删除此列表的最后一个元素,如果此列表为空,则返回null
    (压入)void push(E e)将元素推送到此列表所表示的堆栈中
    (删除)removeFirst()从此列表中删除并返回第一个元素
    (删除)removeLast()从此列表中删除并返回最后一个元素

    示例代码

    1. public static void main(String[] args) {
    2. //添加
    3. //void addFirst(E e)在此列表的开头插入指定的元素
    4. //void addLast(E e)将指定的元素追加到此列表的末尾
    5. LinkedList list=new LinkedList<>();
    6. list.addFirst("十二路谭腿");
    7. list.addFirst("洪家铁线拳");
    8. list.addFirst("五郎八卦棍");
    9. list.addFirst("太极拳");
    10. list.addFirst("狮吼功");
    11. list.addFirst("蛤蟆功");
    12. list.addLast("如来神掌");
    13. System.out.println(list);
    14. System.out.println(list.size());
    15. //获取
    16. //E getFirst()返回此列表的第一个元素
    17. //E getLast()返回此列表中的最后一个元素。
    18. System.out.println(list.getFirst());
    19. System.out.println(list.getLast());
    20. System.out.println("-----------------");
    21. //弹出栈结构
    22. //E pollFirst()检索并删除此列表的第一个元素,如果此列表为空,则返回null;
    23. //E pollLast()检索并删除此列表的最后个元素,如果此列表为空,则返回null;
    24. System.out.println(list.pollFirst());
    25. System.out.println(list.pollFirst());
    26. System.out.println(list.pollLast());
    27. System.out.println(list);
    28. //push 压入
    29. //void push(E e)将元素推送到此列表所表示的堆栈中
    30. list.push("六指琴魔");
    31. System.out.println(list);
    32. //删除
    33. //E removeFirst() 从此列表中删除并返回第一个元素
    34. //E removeLast() 从此列表中删除并返回最后一个元素
    35. String hh=list.removeFirst();
    36. System.out.println(hh);
    37. String ty=list.removeLast();
    38. System.out.println(ty);
    39. System.out.println(list);
    40. }

    HashMap散列表

    • 它存储的内容是键值对映射
    • 它实现了Map接口,根据HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步,其次HashMap是无序的,既不会记录插入的顺序

    HashMap散列表的常见使用

    常见方法
    public V put (K key,V value)把指定的键与指定的值添加到map集合中
    public  V remove (Object key)把指定的键所对应的键值对元素在map集合中删除,返回被删除元素的值
    public  V get (Object key)根据指定的键,在Map集合中获取对应的值
    public Set keySet()获取Map集合中所有的键,存储到Set集合中
    public Set> enteySet()获取到Map集合中所有的键值对对象的集合
    public  boolean containKey(Object key)判断该集合中是否有此键

    示例代码:

    1. public static void main(String[] args) {
    2. HashMap map=new HashMap<>();
    3. //public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
    4. map.put("aa","打工豹");
    5. map.put("bb","野猪蓬蓬");
    6. map.put("cc","鬣狗");
    7. map.put("dd","三嫂");
    8. System.out.println(map);
    9. //public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
    10. System.out.println(map.remove("bb"));
    11. System.out.println(map);
    12. //public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
    13. System.out.println(map.get("aa"));
    14. System.out.println(map.get("cc"));
    15. //public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
    16. Set keys=map.keySet();
    17. System.out.println(keys);
    18. //public Set> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
    19. //public boolean containKey(Object key) :判断该集合中是否有此键。
    20. }
    map的遍历

    示例代码:

    1. public static void main(String[] args) {
    2. //方式1:键找值方式
    3. System.out.println("---------方式1:键找值方式-----------");
    4. HashMap map=new HashMap<>();
    5. map.put("白小纯","候小妹");
    6. map.put("罗峰","许昕");
    7. map.put("许青","紫玄");
    8. map.put("楚梁","姜月白");
    9. Set hs=map.keySet();
    10. for(String key:hs){
    11. String value=map.get(key);
    12. System.out.println(key+"---"+value);
    13. }
    14. //方式2:键值对方式
    15. System.out.println("---------方式2:键值对方式------------");
    16. HashMap map1=new HashMap<>();
    17. map1.put("唐三","小舞");
    18. map1.put("戴沐白","朱竹清");
    19. map1.put("奥斯卡","宁荣荣");
    20. map1.put("马红俊","白沉香");
    21. Set> entries=map1.entrySet();
    22. for (Map.Entry entry:entries) {
    23. String key1= entry.getKey();
    24. String value1 =entry.getValue();
    25. System.out.println(key1+"---"+value1);
    26. }
    27. //方式3:lambda表达式方式
    28. System.out.println("---------方式3:lambda表达式方式------------");
    29. HashMap map2=new HashMap<>();
    30. map2.put("阿星","如来神掌");
    31. map2.put("苦力强","十二路谭腿");
    32. map2.put("早餐铺老板","五郎八卦棍");
    33. map2.put("洋衣店裁缝","洪家铁线拳");
    34. //利用匿名内部类来遍历集合
    35. map2.forEach(new BiConsumer() {
    36. @Override
    37. public void accept(String key2, String value2) {
    38. System.out.println(key2+"---"+value2);
    39. }
    40. });
    41. //利用lambda表达式来遍历集合
    42. map2.forEach((String key2,String value2)->{
    43. System.out.println(key2+"---"+value2);
    44. });
    45. //简化lambda表达式来遍历集合
    46. map2.forEach((key2,value2)-> System.out.println(key2+"---"+value2));
    47. }

    总结

    ArrayList集合、Iterator 迭代器、LinkedList 链表、HashMap散列表中所展示的方法只是较为常见的,如果遇到特殊情况,还需到它指定的API中查找对应的方法

  • 相关阅读:
    Qt+树莓派4B 窗口半透明效果实现
    [html]当网站搭建、维护的时候,你会放个什么界面?
    基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
    搜索引擎之ElasticStack的学习
    2022-08-05:以下go语言代码输出什么?A:65, string;B:A, string;C:65, int;D:报错。
    CentOS 7 安装 kubernetes1.24.x 保姆教程
    CSS超出两行隐藏
    华为eNSP配置专题-ACL的配置
    如何查看go依赖包的license (glice)
    module pandas has no attribute Int64Index
  • 原文地址:https://blog.csdn.net/yangkeOK/article/details/132641759