集合框架之list集合

1.集合框架(简介、Collection方法、迭代器)

提供一个api在线文档地址http://tool.oschina.net/apidocs/apidoc?api=jdk-zh(可以直接访问,拿走不谢)。
1.简介
集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系
2.集合的的三种遍历方式(foreach,迭代器)
准备工作:先在主方法中写入在这里插入图片描述

2.2 foreach循环
在这里插入图片描述
2.3迭代器在这里插入图片描述
代码运行结果为
在这里插入图片描述
附加: 集合的remover方法与迭代器的remover方法有什么区别?
1.先解释集合的remover方法
在这里插入图片描述
此处是在迭代器中使用的集合的remover方法
在这里插入图片描述
运行之后会有问题,简单的解释就是一个并发问题,it.next()指容器中的指针往下移从而导致了出现 java.util.ConcurrentModificationException
正确写法在迭代器中使用的是迭代器的remover方法
在这里插入图片描述

2.集合框架集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)

1.个人提供的ArrayList方法(特有的add和remove)
在这里插入图片描述在这里插入图片描述
在其中可看到add(int index,E element) 和 remover(int index) 方法都是带有一个int类型的参数,可以看到这类的容器是有下标,可以按照下标去取、删除…等等的方式去操作容器的元素
2.特有迭代器(讲解list所特有的方法listIterator)
准备工作:在主方法中写如下代码:
在这里插入图片描述
在写一个迭代器如图:
在这里插入图片描述
运行结果如下在这里插入图片描述
附加因Arratlist有下标所有提供了从后面向前面便利的代码

在这里插入图片描述
必须先从前遍历到后面才能从后面遍历到前面(arraylist遍历的本质是通过箭头其遍历,最开始箭头在最上面,通过从前向后遍历,使的箭头在最下面,在通过向上便利实现从后面开始遍历)

3.具体对象特点、增长因子论证

3.1具体对象的特点
List的三个子类的特点:
①Arraylist:
数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5 10
② Vector:
数组结构 增删改查都慢 有连续下标 线程同步 增长因子2 10
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
③Linkedlist:
链表结构 增删快,查询慢 没有连续下标

3.2增长因子论证
准备工作:在主方法中写入如下代码:
在这里插入图片描述
再在主方法外面写一个方法,如下图:
在这里插入图片描述
运行结果为在这里插入图片描述

4.集合框架LinkedList

  • 通过linkedList集合来制作一个堆栈结构的容器
  • 获取制作一个队列制作的结构的容器
    先理解LinkedList集合
    在这里插入图片描述
    4.1堆栈(先进后出)
    准备工作:在主方法中写入如下代码:
    在这里插入图片描述
    再写一个方法在这里插入图片描述
    4.2队列(先进先出)
    准备工作:在主方法中写入如下代码:
    在这里插入图片描述
    再写一个方法
    在这里插入图片描述

5.集合框架ArrayList中的重复元素去重及其底层原理

5.1 元素是字符串
准备工作:在主方法中写人如下代码
在这里插入图片描述

再定义一个方法,如图:
在这里插入图片描述
运行结果应该为4

5.2 元素是自定义对象
准备工作:在主方法中写入如下代码
在这里插入图片描述

再定义一个方法,如下图

class Person{
	private String name;
	private int age;
	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;
	}
	@Override
	public String toString() {
		return "Persion [name=" + name + ", age=" + age + "]";
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		super();
	}
	
	public boolean equals(Object obj) {
		Person p = (Person) obj;
//		System.out.println(p.name+"---equals---"+this.name);
		return p.name.equals(this.name) && p.age == this.age;
	}
}

运行完后结果应该是4

猜你喜欢

转载自blog.csdn.net/weixin_44255950/article/details/94591895