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<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add(1,"e");
//遍历
for(int i=0;i<list.size();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<String> it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
运行结果:
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类
ArrayList : 有序 可存储重复元素 增删快查找慢
LinkedArrayList : 有序 可存储重复元素 查找快增删慢
HashiSet:无序 不可重复
LinkedHashiSet:有序 不可重复
1.3 Collection接口的基本方法
既然Collection接口是集合中的顶层接口,那么它中定义的所有功能子类都可以使用。查阅API中描述的Collection接口。Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
实体类:
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<Integer> list=new ArrayList<Integer>();
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();
}
}
运行结果:
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<String, HashMap<Person,String>> map=new HashMap<String, HashMap<Person,String>>();
HashMap<Person,String> m1=new HashMap<Person,String>();
HashMap<Person,String> m2=new HashMap<Person,String>();
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<String> schools=map.keySet();
for(String school : schools){
//根据学校名称获取所哟有班级map
HashMap<Person, String> classes = map.get(school);
//遍历该班级的所有Set得到
Set<Person> persons=classes.keySet();
for(Person person:persons){
String classname=classes.get(persons);
System.out.println("学校名称为:"+school+",班级名称为:"+person.getName()+"年龄为:"+person.getAge());
}
}*/
Iterator<Map.Entry<String, HashMap<Person, String>>> it=map.entrySet().iterator();
while (it.hasNext()) {
//获取学校
Entry<String, HashMap<Person, String>> schools = it.next();
String schooler = schools.getKey();
HashMap<Person, String> classer = schools.getValue();
Iterator<Map.Entry<Person, String>> it1=classer.entrySet().iterator();
while (it1.hasNext()) {
Entry<Person, String> clas= it1.next();
Person key = clas.getKey();
String value = clas.getValue();
System.out.println(schooler+" "+key.getName()+" "+key.getAge());
}
}
}
}
运行结果:
Iterator迭代器
2.1 Iterator迭代器
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
迭代集合元素图解:
在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式
package com.oracle.demo01;
import java.util.Iterator;
import java.util.LinkedHashMap;
public class Demo02 {
public static void main(String[] args) {
LinkedHashMap<Person, String> map = new LinkedHashMap<Person, String>();
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<Person> it=map.keySet().iterator();
while (it.hasNext()) {
Person key = it.next();
String value=map.get(key);
System.out.println(key+" "+value);
}
}
}
运行结果:
2.2 集合元素的向下转型(强转)
在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式。
增强for循环
格式:
for(元素的数据类型 变量 : Collection集合or数组){
}
注意:新for循环必须有被遍历的目标。目标只能是Collection或者是数组。
建议:遍历数组时,如果仅为遍历,可以使用增强for如果要对数组的元素进行 操作,使用老式for循环可以通过角标操作。
Java集合、Iterator迭代器和增强for循环整理的更多相关文章
- java基础(18):集合、Iterator迭代器、增强for循环、泛型
1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...
- 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...
- 集合、迭代器、增强for循环、泛型
1集合 集合是java中提供的一种容器,可以用来存储多个数据. 数组的长度是固定的.集合的长度是可变的.集合中存储的元素必须是引用类型数据. 1.1ArrayList集合存储元素(复习) 例: pub ...
- Java集合Iterator迭代器的实现
一.迭代器概述 1.什么是迭代器? 在Java中,有很多的数据容器,对于这些的操作有很多的共性.Java采用了迭代器来为各种容器提供了公共的操作接口.这样使得对容器的遍历操作与其具体的底层实现相隔离, ...
- java基础-迭代器(Iterator)与增强for循环
java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...
- Java集合中迭代器的常用用法
该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...
- java关于集合的遍历与增强for循环(foreach)的使用
java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合 ...
- set集合的遍历(基于迭代器和增强for循环,没有一般的for循环)
赋:开发项目中见到的代码 Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法 package com.sort; import java.util.HashSet; ...
- Java 集合:迭代器(Iterator, Iterable)
Iterator接口 public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } 访问元素前需 ...
随机推荐
- 使用binlog,实现MySQL数据恢复
mysql的binlog日志,用于记录数据库的增.删.改等修改操作,默认处于关闭状态.使用binlog实现数据恢复的条件为 1.binlog日志功能已开启 2.若binlog在数据库创建一段时候后开启 ...
- Python图形库Turtle
画笔绘制状态函数 函数 描述 pendown() 放下画笔 penup() 提起画笔,与pendown()配合使用 pensize(width) 设置画笔线条的粗细为指定大小 画笔运动函数 函数 描述 ...
- Django RBAC用户权限设计方案
RBAC基于用户权限系统设置方案 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干 ...
- Docker基本使用(一)
使用docker输入hello world Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world $ docker ru ...
- Django+Xadmin打造在线教育系统(八)
首页和全局404,500配置 轮播图 公开课 授课机构 新建view ## 首页view class IndexView(View): def get(self,request): # 取出轮播图 a ...
- Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1
A. Water Buying 链接:http://codeforces.com/contest/1118/problem/A 实现代码: #include<bits/stdc++.h> ...
- 基于 __new__ 方法的单例模式
单例模式定义 首次实例化创建实例化对象 之后的每次实例化都用最初的实例化对象 即单实例模式 __new__ 的原理 __new__ 方法可以在 __init__ 方法执行 这样可以在初始化之前进行一系 ...
- Hdoj 2501.Tiling_easy version 题解
Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法. Input 输入的第 ...
- docker_flannel
目录 一.安装etcd 安装 运行 验证 二.安装和配置 flannel 三. Docker 中使用 flannel 配置 Docker 连接 flannel 容器连接到 flannel 网络 四.f ...
- Java collection 容器
http://www.codeceo.com/article/java-container-brief-introduction.html Java实用类库提供了一套相当完整的容器来帮助我们解决很多具 ...