1.

1.List集合根据角标获取元素

import java.util.ArrayList;
import java.util.List; public class List集合 {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
//在集合中插入数据
list.add(1,"WW");
System.out.println(list);//index<=数据长度
//获取指定角标的元素
System.out.println(list.get(2));
//遍历list集合
System.out.println("---------------------");
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}

[a, b, c]
[a, WW, b, c]
b
---------------------
a
WW
b
c

· List集合删除元素并发异常



不可直接改变集合的结构

在ArrayList中每次调用next时(输出下一个元素),都会判断modCount != expectedModCount

如果不相等则会抛出异常

modCount :集合修改次数

expectedModCount :迭代器中记录的集合修改的次数



而调用it.remove();它则会让modCount = expectedModCount

若想添加元素,不能借助迭代器

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class 并发异常 {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
·List集合删除元素并发异常
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
//删除集合中的数字2
Iterator it =list.iterator();
//1.确定是否还有元素
while (it.hasNext()) {
//2.取出元素
String str = (String)it.next();
//3.找到元素2
if(str.equals("2")) {
//4.删除元素2
//list.remove("2");
it.remove();
}
}
System.out.println(list);
【[1, 3]】
·List集合添加元素并发异常
ListIterator it2 = list.listIterator();
while(it2.hasNext()) {
String str2 = (String)it2.next();
if(str2.equals("1")) {//在此元素之后添加数据
it2.add("456");
}
}
System.out.println(list);
}
}
【[1, 456, 3]】
· ListIterator的向前遍历集合方法
while(it2.hasPrevious()) {
System.out.print("preindex = "+ it2.previousIndex());
System.out.println(",元素为" + it2.previous());
}
【preindex = 2,元素为3
preindex = 1,元素为456
preindex = 0,元素为1

ArrayList数据结构分析

查找比较快

添加删除比较慢



去除一个集合中的重复元素

import java.util.ArrayList;
import java.util.ListIterator; public class 去除重复元素 {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("a");
al.add("a");
al.add("b");
al.add("b");
al.add("c");
al.add("e");
//创建一个空的集合
ArrayList al2 = new ArrayList();
//取出每一个元素(遍历)
ListIterator it = al.listIterator();
while(it.hasNext()) {
//每取出一个元素,要判断新集合中是否有相同元素
Object obj = it.next();
//如果没有重复,则放入新集合
if(!al2.contains(obj)) {
al2.add(obj);
}
}
System.out.println(al2);
}
}
【[a, b, c, e]】

可以将此写成一个工具类

import java.util.ArrayList;
import java.util.ListIterator; public class 去除重复元素 {
static ArrayList getSingle(ArrayList al) {
//创建一个空的集合
ArrayList al2 = new ArrayList();
//取出每一个元素(遍历)
ListIterator it = al.listIterator();
while(it.hasNext()) {
//没取出一个元素,要判断新集合中是否有相同元素
Object obj = it.next();
//如果没有重复,则放入新集合
if(!al2.contains(obj)) {
al2.add(obj);
}
}
//System.out.println(al2);
return al2;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("a");
al.add("a");
al.add("b");
al.add("b");
al.add("c");
al.add("e");
ArrayList list = getSingle(al);
System.out.println(list);
ArrayList al2 = new ArrayList();
al2.add("a");
al2.add("a");
al2.add("c");
al2.add("c");
al2.add("e");
ArrayList list2 = getSingle(al2);
System.out.println(list2);
}
}
【[a, b, c, e]
[a, c, e]】

java47的更多相关文章

随机推荐

  1. linux上性能调优常用命令及简介

    1.综合命令:nmon.top:topas(aix) d :磁盘相关 c:cpu相关 m:内存相关 2.磁盘 2.1 测试顺序写性能dd if=/dev/zero of=/cdr/test.data ...

  2. Python+Django实现微信扫码支付流程

    Python+Django实现微信扫码支付流程 关注公众号"轻松学编程"了解更多. 获取源码可以加我微信[1257309054],文末有二维码. [微信公众号支付官网]https: ...

  3. python机器学习TensorFlow框架

    TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 ​ TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...

  4. python获取汉字首字母

    获取汉字首字母 关注公众号"轻松学编程"了解更多. 应用场景之一:可用于获取名字首字母,在数据库中查询记录时,可以用它来排序输出. from pytz import unicode ...

  5. 安装jdk及安装多版本jdk

    目录 由于要使用多个版本jdk,所以看下如何在一台电脑安装多个版本jdk 当然,如果你只需要安装一个jdk,本文也适合你,只需要在JAVA_HOME值填你jdk安装的目录即可 一.首先安装好不同的jd ...

  6. 【Kata Daily 190923】Odder Than the Rest(找出奇数)

    题目: Create a method that takes an array/list as an input, and outputs the index at which the sole od ...

  7. unix进程间通信方式(IPC)

    unix进程间通信方式(IPC) 管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. 命名管道(named pipe):命名管道克服了管道没有 ...

  8. cmd,py脚本,py编译的exe,uipath及uibot对它们的调用

    UIPATH调用Python编译程序exe 好处: 1)code不以可编辑的状态被用户接触,对于不懂反编译的一般用户,可提升一定的代码安全性: 2)不需要用户机器上安装 python环境. 3)可以将 ...

  9. 【JVM第二篇--类加载机制】类加载器与双亲委派模型

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.什么是类加载器 在类加载过程中,加载阶段有一个动作是"通过一个类的全限 ...

  10. MySQL时间类型datetime、bigint及timestamp的查询效率

    前期数据准备 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_dat ...