List集合和List集合特有的功能,常见数据结构及其特点
List集合的概述及特点:
元素有序,并且每一个元素都存在一个索引.元素可以重复。
List集合特有的功能:
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
List特有功能的举例:
[code]package org.westos.Demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Demo { public static void main(String[] args) { // void add(int index,E element): 在指定索引处添加元素 // E remove(int index):移除指定索引处的元素 返回的是移除的元素 // E get(int index):获取指定索引处的元素 List list = new ArrayList();//创建一个List集合 list.add(1); list.add(2); list.add(3); // void add(int index,E element) list.add(0, 10); //遍历集合 Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } // E remove(int index) Integer remove = (Integer) list.remove(0); System.out.println("被移除的元素:"+remove); System.out.println(list); //E get(int index) System.out.println(list.get(list.size() - 1)); } }
List特有的迭代器ListIterator(列表迭代器):
ListIterator的特有功能
boolean hasPrevious():是否存在前一个元素
E previous():返回列表中的前一个元素
以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历 这样指针才能移到最后
如果直接反向遍历是没有效果的 因为指针默认位置就在最前面 他前面没有元素
List集合元素的遍历方式:
List集合元素的遍历方式有三种:
1 用父接口中的iterator()获取迭代器,用迭代器中的hasNext() 和next()方法来进行遍历
2 ListIterator获取迭代器,用迭代器中的的hasNext() 和next()方法来进行遍历来遍历。方法1同理。
2 通过自己本身的size()方法和get方法来进行遍历。
三种遍历方式以及反向遍历的举例:
[code]package org.westos.Demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; //测试类 public class Demo2 { //主方法 public static void main(String[] args) { List list = new ArrayList();//创建一个list集合 Student s1 = new Student("小米", 21);//创建4个学生类对象 Student s2 = new Student("小明", 22); Student s3 = new Student("小华", 24); Student s4 = new Student("小涛", 23); list.add(s1);//将四个学生对象放到集合中 list.add(s2); list.add(s3); list.add(s4); bianli(list);//调用遍历方法 } //遍历方法 public static void bianli(List list) { Iterator iterator = list.iterator();//获取一个迭代器 while (iterator.hasNext()) {//判断有没有下一个元素 Student student = (Student) iterator.next();//将下一个元素拿出来向下转型 System.out.println(student.getName() + "-----" + student.getAge());//打印 } System.out.println("------------------------------------"); ListIterator listIterator = list.listIterator();//获取一个列表迭代器 while (listIterator.hasNext()) {//判断有没有下一个元素 Student student1 = (Student) listIterator.next();//将下一个元素拿出来向下转型 System.out.println(student1.getName() + "------" + student1.getAge());//打印 } System.out.println("-------------------------------------------"); while (listIterator.hasPrevious()) {//判断有没有前一个元素 Student student2 = (Student) listIterator.previous();//将前一个元素拿出来向下转型 System.out.println(student2.getName() + "-----" + student2.getAge());//打印 } System.out.println("---------------------------------------"); for (int i = 0; i < list.size(); i++) { Student student3 = (Student) list.get(i);//用get()方法吧第i个元素拿出来向下转型 System.out.println(student3.getName() + "------" + student3.getAge()); } } } package org.westos.Demo; public class Student { private String name; private int age; //无参构造 public Student() { } //有参构造 public Student(String name, int age) { this.name = name; this.age = age; } //setXXX和getXXX方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //重写toString方法 @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
并发修改异常产生问题及其解决方法:
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素。
ConcurrentModificationException(并发修改异常)出现;
我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数
这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了
解决方案 :我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了
a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
b:集合遍历元素,集合修改元素
解决方案2 使用for循环遍历集合 添加元素 不会报错
[code]package org.westos.demo2; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListDemo5 { public static void main(String[] args) { // A:案例演示 // 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。 List<String> arrayList = new ArrayList<String>(); arrayList.add("hello"); arrayList.add("world"); ListIterator<String> iterator = arrayList.listIterator(); while (iterator.hasNext()) { String ele = iterator.next(); if("world".equals(ele)) { //arrayList.add("javaee"); // ConcurrentModificationException 并发修改异常 iterator.add("javaee");//用迭代器的添加方法 } } System.out.println(arrayList); //为什么会出现并发修改异常:我现在用的是迭代器,进行遍历,在遍历之前,迭代器已经知道了,你集合中的所有元素 //然后你在迭代的过程当中,突然间想要添加一个元素,迭代器肯定加不进去的 //解决方案1:用迭代器中的添加方法 //解决方法2 用for 进行遍历 for(int i=0;i<arrayList.size();i++) { String ele = arrayList.get(i); if("world".equals(ele)) { arrayList.add("javaee"); // ConcurrentModificationException 并发修改异常 } } System.out.println(arrayList); //set() 替换集合中指定索引处的元素,返回的是被替换的元素 String set = arrayList.set(arrayList.size()-1, "JSP"); System.out.println(set); System.out.println(arrayList); } }
数据结构之栈和队列:
数据结构概述及常见数据结构
数据结构其实就是存储数据的格式 分类: 栈 , 队列 , 数组 , 链表 , 树 , 哈希表
栈特点: 先进后出
队列: 先进先出
数据结构之数组和链表:
数组特点: 查询快 , 增删慢
链表特点: 查询慢 , 增删快
阅读更多
- 15 API-集合(Collection(功能,迭代器),List(List特有迭代器,并发异常),常见数据结构图示(栈,队列,数组,链表))&对象数组
- 集合框架_集合的特点和数据结构、如何选择使用哪种集合呢、各种集合常见功能和遍历方式总结
- List集合的特有功能概述
- List集合的特有功能
- 黑马程序员-java基础-List集合的特有功能
- Java基础知识强化之集合框架笔记26:LinkedList的特有功能
- 黑马程序员-java基础-List集合的特有遍历功能
- 集合框架_List集合的特有功能概述和测试
- 集合框架_List集合的特有遍历功能
- 集合框架(LinkedList的特有功能)
- Java基础知识强化之集合框架笔记16:List集合的特有功能概述和测试
- Java基础知识强化之集合框架笔记17:List集合的特有的遍历功能
- 3、 003 List集合的特有功能
- List集合的子实现类及其特点
- * List集合的特有功能: * A:添加功能
- 集合LinkedList 的特有功能
- List集合的特有遍历功能
- 集合框架(List集合的特有功能概述和测试)
- 集合框架(List集合的特有遍历功能)
- Java_基础—List集合的特有功能概述和测试