#集合笔记二#list集合特有功能及案例迭代

1、List集合的特有功能

  • List集合的增加功能

void add(int index,E element); 在指定位置添加元素

  • List集合的删除功能

Object remove(int index) 根据索引删除元素,返回被删除的元素

  • List集合的获取功能

Object get(int index)  获取指定位置上的元素

  • List集合的修改功能

Object set(int index , object element) 根据索引修改元素,返回被修改的元素

2、List集合存储字符串并遍历(迭代器和普通for)

  1. package com.fenxiangbe.collection;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Test3 {
  5. public static void main(String[] args) {
  6. List l = new ArrayList();
  7. l.add(“a”);
  8. l.add(“b”);
  9. l.add(“c”);
  10. l.add(“d”);
  11. for (int i = 0; i < l.size(); i++) {
  12. System.out.println(l.get(i));
  13. }
  14. }
  15. }

3、List集合存储自定义对象并遍历(迭代器和普通for)

  1. package com.fenxiangbe.collection;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.fenxiangbe.bean.Student;
  5. public class Test4 {
  6. public static void main(String[] args) {
  7. List l = new ArrayList();
  8. l.add(new Student(“张三”, 23));
  9. l.add(new Student(“李四”, 24));
  10. l.add(new Student(“王五”, 25));
  11. for (int i = 0; i < l.size(); i++) {
  12. System.out.println(l.get(i));
  13. }
  14. }
  15. }

4、并发修改异常出现的原因?解决方案?

  • 报错:ConcurrentModificationException
  • 原因:迭代器是依赖于集合而存在的。我们在通过迭代器迭代的过程中,用集合往集合中添加了元素,而并没有重新获取迭代器,所以,报错。

解决方案:

  • a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
  • b:集合遍历元素,集合修改元素

案例代码

  1. package com.fenxiangbe.collection;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.ListIterator;
  5. public class Test5 {
  6. public static void main(String[] args) {
  7. List l = new ArrayList();
  8. l.add(“a”);
  9. l.add(“b”);
  10. l.add(“c”);
  11. l.add(“d”);
  12. ListIterator li = l.listIterator();
  13. while(li.hasNext()){
  14. String s = (String)li.next();
  15. if(“c”.equals(s)){
  16. li.add(“fenxingbe”);
  17. }
  18. }
  19. System.out.println(l);
  20. }
  21. }

5、常见的数据结构的特点

  • 数组:查询快,修改也快,但是增删慢
  • 链表:查询慢,修改慢,但是增删快

6、List集合的子类特点

  • arraylest:底层是数组结构,所以查询快,增删慢,线程不安全的,效率高
  • Vector: 底层数据结构是数组,查询快,增删慢。 线程安全,效率低。
  1. Vector相对ArrayList查询慢(线程安全的)
  2. Vector相对LinkedList增删慢(数组结构)
  • LinkedList: 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。

Vector和ArrayList的区别

  • 区别:Vector是线程安全的,效率低 ArrayList是线程不安全的,效率高
  • 共同点:都是数组实现的

ArrayList和LinkedList的区别

  • 区别:ArrayList底层是数组结果,查询和修改快 LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
  • 共同点:都是线程不安全的

List有三个子类,我们到底使用谁呢?

  •  查询多用ArrayList
  • 增删多用LinkedList
  • 如果都多ArrayList

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

剑指Offer面试题:12.在O(1)时间删除链表结点

  在单向链表中删除一个结点,最常规的做法无疑是从链表的头结点开始,顺序遍历查找要删除的结点,并在链表中删除该结点。这种思路由于需要顺序查找,时间复杂度自然就是...

8110
来自专栏kevindroid

leetcode 93. Restore IP Addresses

21740
来自专栏我是业余自学C/C++的

Remove Duplicates from Sorted Array II

17640
来自专栏Java技术栈

Java码农必须掌握的循环删除List元素的正确方法!

首先看下下面的各种删除list元素的例子 public static void main(String[] args) { List<Stri...

369100
来自专栏IT可乐

Java数据结构和算法(十四)——堆

  在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入...

413110
来自专栏Java帮帮-微信公众号-技术文章全总结

【Java提高十六】集合List接口详解

在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在...

26030
来自专栏用户画像

HashSet和HashMap的区别 && HashTable和HashMap的区别

2.Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。

10130
来自专栏desperate633

LintCode 子数组之和题目分析代码

给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置

6320
来自专栏大数据钻研

Java集合类操作优化经验总结

本文首先针对 Java 集合接口进行了一些介绍,并对这些接口的实现类进行详细描述,包括 LinkedList、ArrayList、Vector、Stack、Ha...

393170
来自专栏互扯程序

Java常用集合源码级深度解析

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:...

52460

扫码关注云+社区

领取腾讯云代金券