java 迭代器排序_Java集合、Iterator迭代器和增强for循环整理

集合

集合,集合是java中提供的一种容器,可以用来存储多个数据。

数组的长度是固定的。集合的长度是可变的。集合中存储的元素必须是引用类型数据

1.1      ArrayList集合存储元素

package com.oracle.List;

import java.util.List;

import java.util.ArrayList;

import java.util.Iterator;

public class Demo01 {

public static void main(String[] args) {

List list=new ArrayList();

list.add("a");

list.add("b");

list.add("c");

list.add(1,"e");

//遍历

for(int i=0;i

System.out.println(list.get(i));

}

//删除指定位置上的元素

list.remove(0);

System.out.println("=========");

//遍历

for(String i : list){

System.out.println(i);

}

System.out.println("======================");

//修改指定位置上的元素

list.set(1, "你好吗?");

Iterator it=list.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

运行结果:

6762e75937ff03b1c8a0a8c33992b125.png

1.2      集合的继承实现关系

查看ArrayList类发现它继承了抽象类AbstractList同时实现接口List,而List接口又继承了Collection接口

源代码:

interface List extends Collection {

}

public class ArrayList extends AbstractList implements List{

}

这说明我们在使用ArrayList类时,该类已经把所有抽象方法进行了重写。那么,实现Collection接口的所有子类都会进行方法重写。

Collection接口常用的子接口有:List接口、Set接口

List接口常用的子类有:ArrayList类、LinkedList类

Set接口常用的子类有:HashSet类、LinkedHashSet类

6d4dbe08e4b9e7b1c71407b3c44b0af6.png

ArrayList : 有序 可存储重复元素 增删快查找慢

LinkedArrayList : 有序 可存储重复元素 查找快增删慢

HashiSet:无序  不可重复

LinkedHashiSet:有序 不可重复

1.3      Collection接口的基本方法

既然Collection接口是集合中的顶层接口,那么它中定义的所有功能子类都可以使用。查阅API中描述的Collection接口。Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

e95a47a80eab751dcf0b47da8a7d705b.png

实体类:

package com.oracle.Collections;

public class Person {

private String name;

private int age;

public Person() {

}

public Person(String name, int age) {

super();

this.name = name;

this.age = 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 "Person [name=" + name + ", age=" + age + "]";

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Person other = (Person) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

}

package com.oracle.Collections;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class Demo01 {

public static void main(String[] args) {

List list=new ArrayList();

list.add(55);

list.add(53);

list.add(5);

list.add(52);

list.add(24);

list.add(44);

list.add(33);

//对数组进行排序

Collections.sort(list);

for(int i :list){

System.out.print(i+" ");

}

System.out.println();

//打乱集合元素的顺序

Collections.shuffle(list);

for(int i :list){

System.out.print(i+" ");

}

System.out.println();

}

}

运行结果:

499a489e238c5d50f955567e6f77277b.png

package com.oracle.Collections;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

public class Demo02 {

private static Object classnames;

public static void main(String[] args) {

HashMap> map=new HashMap>();

HashMap m1=new HashMap();

HashMap m2=new HashMap();

m1.put(new Person("拉拉",22), "java1203班");

m1.put(new Person("欣欣",21), "java1203班");

m2.put(new Person("夏欣",18), "java1010班");

m2.put(new Person("小曦",24), "java1010班");

map.put("北大", m1);

map.put("清华", m2);

//key+增强for

/*Set schools=map.keySet();

for(String school : schools){

//根据学校名称获取所哟有班级map

HashMap classes = map.get(school);

//遍历该班级的所有Set得到

Set persons=classes.keySet();

for(Person person:persons){

String classname=classes.get(persons);

System.out.println("学校名称为:"+school+",班级名称为:"+person.getName()+"年龄为:"+person.getAge());

}

}*/

Iterator>> it=map.entrySet().iterator();

while (it.hasNext()) {

//获取学校

Entry> schools = it.next();

String schooler = schools.getKey();

HashMap classer = schools.getValue();

Iterator> it1=classer.entrySet().iterator();

while (it1.hasNext()) {

Entry clas= it1.next();

Person key = clas.getKey();

String value = clas.getValue();

System.out.println(schooler+"  "+key.getName()+"  "+key.getAge());

}

}

}

}

运行结果:

e63986fc73be498ea35091ad395990fb.png

Iterator迭代器

2.1    Iterator迭代器

Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。

next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。

88f19cd26f64e481b4a2d28b4328cffe.png

迭代集合元素图解:

68f724bad5a33d9a9f6bd2ca7369ecb7.png

2c0603f908159851331d17951f72ff54.png

在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式

e0b94c5f99b35ec39c47a0d2cdebf95b.png

package com.oracle.demo01;

import java.util.Iterator;

import java.util.LinkedHashMap;

public class Demo02 {

public static void main(String[] args) {

LinkedHashMap map = new LinkedHashMap();

Person p1 = new Person("赵四", 18);

Person p2 = new Person("张三", 18);

Person p3 = new Person("熊大", 19);

map.put(p1, "Java1班");

map.put(p2, "Java2班");

map.put(p3, "Java3班");

//遍历

Iterator it=map.keySet().iterator();

while (it.hasNext()) {

Person key = it.next();

String value=map.get(key);

System.out.println(key+"   "+value);

}

}

}

运行结果:

6b116cf3dbf614941f9cc66cd21a2237.png

2.2      集合元素的向下转型(强转)

在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式。

661db23761bfead2d8d447022e8bb8f3.png

增强for循环

格式:

for(元素的数据类型 变量 : Collection集合or数组){

}

注意:新for循环必须有被遍历的目标。目标只能是Collection或者是数组。

建议:遍历数组时,如果仅为遍历,可以使用增强for如果要对数组的元素进行 操作,使用老式for循环可以通过角标操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,集合类库提供了一个统一的迭代器接口 `Iterator`,用于遍历集合中的元素。通过迭代器,我们可以按照特定顺序访问集合中的元素,而不需要了解底层数据结构的具体实现。 使用迭代器遍历集合的一般步骤如下: 1. 获取集合对象的迭代器:通过调用集合类的 `iterator()` 方法获取迭代器对象。 2. 使用 `hasNext()` 方法检查是否还有下一个元素。 3. 使用 `next()` 方法获取下一个元素。 4. 对当前元素进行操作。 5. 重复步骤 2-4 直到遍历完所有元素。 以下是一个示例代码,展示如何使用迭代器遍历一个 ArrayList 集合: ```java import java.util.ArrayList; import java.util.Iterator; public class IteratorExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Orange"); // 获取迭代器 Iterator<String> iterator = list.iterator(); // 遍历集合 while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } } } ``` 上述代码中,通过调用 `list.iterator()` 方法获取了 ArrayList 的迭代器对象。然后使用 `hasNext()` 方法检查是否还有下一个元素,再使用 `next()` 方法获取下一个元素。最后,我们可以对每个元素进行操作,这里简单地将其打印到控制台。 需要注意的是,在使用迭代器遍历集合的过程中,如果在迭代时对集合进行了修改(如添加、删除元素),则需要使用迭代器的 `remove()` 方法来删除元素,以避免出现并发修改异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值