Java中的List集合和迭代器
一.Java中的List集合。
终于有时间来好好整理一下Java中的集合。
首先要讲的就是List集合。Java中List集合主要将两个:
第一个是底层使用数组维护的ArrayList,第二个是底层是链表的LinkedList。
1.List
List集合继承Collection集合,就是一个有序列表。
2.ArrayList
1.优点:由于底层维护的是数组,随机访问较为方便。可以动态扩容
2.初始化时的默认长度,以及动态扩容:默认长度为10,动态扩容是1.5倍。
3.实现的主要接口有:List接口,克隆接口,随机访问接口,序列化接口。
4.方法注意:clear(),不是将底层数组删除,而是将其设置为null
代码演示:
package Study_Collection; import java.util.ArrayList;
import java.util.Arrays; public class ArrayListText {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<>(3);
arr.add("A");
arr.add(1,"B");
if( arr.contains("A")){
System.out.println("集合含有A元素");
}else{
System.out.println("集合不含有A元素");
}
if(arr.get(0).equals("A")) {
System.out.println("0号位为A");
}else{
System.out.println("0号位不为A");
}
arr.addAll(arr);
System.out.println("添加了自己后的arr集合:"+arr.toString());
System.out.println("在来测试一下我想要得到一个集合中没有的元素C的位置;"+arr.indexOf("C"));
arr.removeAll(new ArrayList<>(Arrays.asList(new String[] {"A"} )));
System.out.println(arr.toString());
}
}
3.LinkedList
1.优点:插入删除效率较高
2.缺点:随机访问效率较低,虽然提供了get(),set()方法,但是如果随机访问次数较多建议使用ArrayList。
3.特点:Java中链表为双端链表,所以他的迭代器也有双端迭代器。
代码实验:
package Study_Collection; import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator; /**
* LinkedList测试类
*/
public class LinkedListText {
/***
* LinkedList类是一个链表,java中的链表为双向链表
* 优点:善于插入删除
* 缺点:无法随机访问
*/
public static void main(String[] args) {
LinkedList<Integer> list=new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);//链表的add方法直接将元素加入到链表的末尾
//对于列表,它含有双向迭代器,当然也有单向迭代器
ListIterator<Integer> it= list.listIterator();
while(it.hasNext()){//it迭代器的指针在开头位置
it.next();//指针后移
}
while(it.hasPrevious()){//现在it迭代器的指针在末尾
System.out.println(it.previous());//指针前移
}
//在迭代器中的add方法()
//在Collection接口中的add方法实现是直接加到末尾,但是迭代器的add是随着迭代器的位置去加入的。
it.next();
it.next();
it.add(6);
while(it.hasPrevious()){
System.out.println(it.previous());
} //多个迭代器的问题
Iterator<Integer> it2=list.listIterator();
it.next();
it.remove();
it2.next();//抛出并发修改异常,解决方式:多个迭代器时,只有一个可以读与写其他的都是读。
/**
* 对于链表而言虽然提供了get set方法但是效率太低,需要随机访问建议使用ArrayList
*/
System.out.println(list.get(0));
list.set(0,3);
System.out.println(list.get(0));
}
}
3.针对迭代器
package Study_Collection; import java.util.ArrayList;
import java.util.Iterator; /**
*迭代器
*/
public class IteratorText {
public static void main(String[] args) {
/***
* 首先Collection接口实现了迭代器的方法所以实现了collection的类都可以使用迭代器
*/
ArrayList<String> arr=new ArrayList<>();
arr.add("A");
arr.add("B");
Iterator<String> it=arr.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//能够实现foreach循环的必须实现iterator接口
for(String str : arr){
System.out.println(str);
}
//迭代器中的删除,是指删除上一次next()返回的元素,也就是说remove必须和next联合使用
it.next();
it.remove();
System.out.println(it.next());
}
}
Java中的List集合和迭代器的更多相关文章
- 【集合】Java中的具体集合(一)
Java中不止提供了集合框架中的接口,还提供了许多具体的实现. Java中的具体集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行 ...
- Java中如何克隆集合——ArrayList和HashSet深拷贝
编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- java中 列表,集合,数组之间的转换
java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 List和Set都是接口,它们继承Collection(集合),集合里面任何数据 ...
- JAVA中所有与集合有关的实现类都是这六个接口的实现类
JAVA中所有与集合有关的实现类都是这六个接口的实现类. Collection接口:集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构. List接口代表按照元素一定的相关顺序来组 ...
- 持有对象:总结JAVA中的常用容器和迭代器,随机数 速查
JAVA使用术语“Collection”来指代那些表示集合的对象,JAVA提供的接口很多,首先我们先来记住他们的层次结构: java集合框架的基本接口/类层次结构 java.util.Collecti ...
- JAVA迭代器学习--在JAVA中实现线性表的迭代器
1,迭代器是能够对数据结构如集合(ADT的实现)进行遍历的对象.在遍历过程中,可以查看.修改.添加以及删除元素,这是它与一般的采用循环来遍历集合中的元素不同的地方.因为,通常用循环进行的遍历操作一般是 ...
- java中的数据结构 --- 集合
集合类在Java.util包中! 在java中常用的是Set,Map,和List. 容器和迭代器 链表 集 映射
- Java中泛型在集合框架中的应用
泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通 ...
随机推荐
- iOS block 机制
本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同 ...
- [LeetCode] 231. Power of Two ☆(是否2 的幂)
描述 Given an integer, write a function to determine if it is a power of two. 给定一个整数,编写一个函数来判断它是否是 2 的 ...
- redis使用epoll
redis使用epoll的代码在ae_epoll.c文件中. epoll_create:redis服务器在启动时,创建事件循环,调用epoll_create方法创建epoll实例. static in ...
- Python3+selenium+BaiduAI识别并下载花瓣网高颜值妹子图片
一.说明 1.1 背景说明 上周在“Python3使用百度人脸识别接口识别高颜值妹子图片”中自己说到在成功判断颜值后,下截图片并不是什么难点. 直观感觉上确实如此,你判断的这个url适不适合下载,适合 ...
- git rebase commit 信息处理
pick:正常选中 reword:选中,并且修改提交信息: edit:选中,rebase时会暂停,允许你修改这个commit(参考这里) squash:选中,会将当前commit与上一个commit合 ...
- struts项目部署在Tomca上在断网情况下启动报错
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6015693.html 前段时间,项目部署到现场后,反馈Tomcat能正常启动,但是项目有时访问不了也不报错. ...
- Ubuntu安装openssh-server并通过xshell连接
#安装ssh sudo apt-get install openssh-server openssh-client sudo apt-get update sudo apt-get upgrade 查 ...
- R中sort(), rank(), order()
在R中,和排序相关的函数主要有三个:sort(),rank(),order(). sort(x)是对向量x进行排序,返回值排序后的数值向量.rank()是求秩的函数,它的返回值是这个向量中对应元素的“ ...
- UVa 3602 - DNA Consensus String 水题 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- 技术宅学习Linux系统还是很有前途的
老实说,我之所以入了Linux的坑,纯粹只是为了追我现在的男朋友,也就是技术宅.如果不是为了追我男朋友的话,我估计我这辈子都不会去接触linux.好吧,今天写一写过往事情,也是为了怀念当初追男友的一些 ...