简介:
- 集合框架中提供了一个内部类专门操作集合中的元素,这个内部类就是迭代器数据结构。
- 集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。
- 而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。
Collection方法与迭代器
package com.xieminglu;
import java.util.ArrayList;
import java.util.Iterator;
/*
* 介绍集合接口中的特有方法 迭代器的使用
* */
public class Collection {
public static void main(String[] args) {
ArrayList al=new ArrayList<>();
// al.add("a");
// al.add("b");
// al.add("c");
// al.add("d");
// al.add("e");
al.add(22);
al.add(24);
al.add(26);
al.add(28);
al.add(29);
//三种集合形式
/*for (Object obj : al) {
System.out.println(obj);
}
for(int i=0;i<al.size();i++) {
System.out.println(al.get(i));
}
Iterator it = al.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}*/
//删除元素
// Iterator<String> it = al.iterator();//实例化迭代器
// while(it.hasNext()) {
// String str=it.next();//读取当前集合数据元素
// if("b".equals(str)) {
// it.remove();
// }else {
// System.out.println(str+" ");
// }
// }
//获取偶数
Iterator it = al.iterator();
while(it.hasNext()) {
int obj=(Integer)it.next();
if(obj%2==0) {
System.out.println(it.next());
}
}
}
}
从上到下运行的结果分别为:
1.三种集合形式
2.删除指定元素
3.获取偶数
为了大家更能浅显易懂获取偶数这串代码小编画了张图,希望能帮助大家
接口List
List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。
public static void main(String[] args) {
ArrayList al=new ArrayList<>();
al.add(22);
al.add(24);
al.add(26);
al.add(28);
al.add(29);
ListIterator it = al.listIterator();
//顺着取
while(it.hasNext()) {
System.out.println(it.next());
}
//倒着取
while(it.hasPrevious()) {
System.out.println(it.previous());
}
}
输出的结果为:
集合框架Vector
了解它自己的特有遍历方式
public static void main(String[] args) {
Vector v=new Vector<>();
v.add(22);
v.add(24);
v.add(26);
v.add(28);
v.add(29);
Enumeration elements = v.elements();
while(elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
}
输出的结果为:
集合框架LinkedList
队列、堆栈的特性
队列、堆栈的制作
堆栈:
public class LinkedListDemo {
public static void main(String[] args) {
DuiZhan dz=new DuiZhan();
dz.push("a");
dz.push("b");
dz.push("c");
dz.push("d");
dz.push("e");
dz.bianli();
}
}
class DuiZhan{
private LinkedList ll=new LinkedList<>();
public void push(Object obj) {
ll.addFirst(obj);
}
public Object pop() {
return ll.removeFirst();
}
public void bianli() {
Iterator it = ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
输出的结果为:
队列:
输出的结果为:
List去重
public static void main(String[] args) {
ArrayList al=new ArrayList<>();
al.add("a");
al.add("b");
al.add("c");
al.add("d");
al.add("a");
ArrayList newal=repeatList(al);
System.out.println(al.size());
System.out.println(newal.size());
}
private static ArrayList repeatList(ArrayList al) {
// TODO Auto-generated method stub
ArrayList newal=new ArrayList<>();
for (Object obj : al) {
//如果这个元素包含了遍历的元素则不添加到新的集合里
if(!newal.contains(obj)) {
newal.add(obj);
}
}
return newal;
}
输出的结果为:
集合框架ArrayList中的重复元素去重及其底层原理
判断list 集合中元素是否相同,依据的是元素的equals方法
Contains调用了equals
Remove调用了equals
字符串去重
list中存储的是字符串,而string的equals方法就是比的字符串值
引用数据类型去重(相同的类型视为同一个人)
思路
1、对人进行描述,将数据封装进对象
2、将对象放入容器
3、去重
引用数据类型被调用了equals方法验证
public class ArrayLisrRepeatDemo {
public static void main(String[] args) {
ArrayList al=new ArrayList<>();
// al.add("a");
// al.add("b");
// al.add("c");
// al.add("d");
// al.add("a");
al.add(new person("001", "zs"));
al.add(new person("002", "ls"));
al.add(new person("003", "ww"));
al.add(new person("004", "mazi"));
al.add(new person("001", "zs"));
ArrayList newal=repeatList(al);
System.out.println(al.size());
System.out.println(newal.size());
}
private static ArrayList repeatList(ArrayList al) {
// TODO Auto-generated method stub
ArrayList newal=new ArrayList<>();
for (Object obj : al) {
//如果这个元素包含了遍历的元素则不添加到新的集合里
if(!newal.contains(obj)) {
newal.add(obj);
}
}
return newal;
}
}
class person{
private String id;
private String name;
public person(String id, String name) {
super();
this.id = id;
this.name = name;
}
public person() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "person [id=" + id + ", name=" + name + "]";
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(obj instanceof person) {
person p=(person)obj;
System.out.println(this.getName()+"----equals----"+p.getName());
return this.getId().equals(p.getId()) &&
this.getName()==p.getName();
}
return false;
}
}
输出的结果为:
集合list中remove方法调用时,调用了equals方法验证
输出的结果为: