迭代器iterator
集合Collection
List
Map/HashMap
Hashtable
在Java中,有很多的数据容器,对于这些的操作有很多的共性。Java采用了迭代器来为各种容器提供了公共的操作接口。这样使得对容器的遍历操作与其具体的底层实现相隔离,达到解耦的效果。
主要方法:
1.使用next()获得序列中的下一个元素。
2.使用hasNext()检查序列中是否还有元素。
3.使用remove()将迭代器新返回的元素删除。
两种遍历方法:迭代器和foreach:
package com.newcapec.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo1 {
public static void main(String[] args) {
Collection list1=new ArrayList();
list1.add(1);
list1.add("hhh");
list1.add(true);
System.out.println(list1.size());
//方式一:迭代器遍历
Iterator il=list1.iterator();
System.out.println("*************方式一*************");
while(il.hasNext()) {
Object object=il.next();
System.out.println(object);
}
//方式二:foreach遍历
System.out.println("*************方式二*************");
for(Object o:list1) {
System.out.println(o);
}
}
}
主要方法:
boolean add(Object o)添加对象到集合
boolean remove(Object o)删除指定的对象
int size()返回当前集合中元素的数量
boolean contains(Object o)查找集合中是否有指定的对象
boolean isEmpty()判断集合是否为空
Iterator iterator()返回一个迭代器
boolean containsAll(Collection c)查找集合中是否有集合c中的元素
boolean addAll(Collection c)将集合c中所有的元素添加给该集合
void clear()删除集合中所有元素
void removeAll(Collection c)从集合中删除c集合中也有的元素
void retainAll(Collection c)从集合中删除集合c中不包含的元素
List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列。
List可以精确的控制每个元素的插入位置,或删除某个位置元素,它的实现类ArrayList底层是由数组实现的。
主要方法:
Capacity 用于获取或设置List可容纳元素的数量。当数量超过容量时,这个值会自动增长。您可以设置这个值以减少容量,也可以调用trin()方法来减少容量以适合实际的元素数目。
Count 属性,用于获取数组中当前元素数量
Item( ) 通过指定索引获取或设置元素。对于List类来说,它是一个索引器。
Add( ) 在List中添加一个对象的公有方法
AddRange( ) 公有方法,在List尾部添加实现了ICollection接口的多个元素
BinarySearch( ) 重载的公有方法,用于在排序的List内使用二分查找来定位指定元素.
Clear( ) 在List内移除所有元素
Contains( ) 测试一个元素是否在List内
CopyTo( ) 重载的公有方法,把一个List拷贝到一维数组内
Exists( ) 测试一个元素是否在List内
Find( ) 查找并返回List内的出现的第一个匹配元素
FindAll( ) 查找并返回List内的所有匹配元素
GetEnumerator( ) 重载的公有方法,返回一个用于迭代List的枚举器
Getrange( ) 拷贝指定范围的元素到新的List内
IndexOf( ) 重载的公有方法,查找并返回每一个匹配元素的索引
Insert( ) 在List内插入一个元素
InsertRange( ) 在List内插入一组元素
LastIndexOf( ) 重载的公有方法,,查找并返回最后一个匹配元素的索引
Remove( ) 移除与指定元素匹配的第一个元素
RemoveAt( ) 移除指定索引的元素
RemoveRange( ) 移除指定范围的元素
Reverse( ) 反转List内元素的顺序
Sort( ) 对List内的元素进行排序
ToArray( ) 把List内的元素拷贝到一个新的数组内
trimToSize( ) 将容量设置为List中元素的实际数目
例子:
package com.newcapec.collection;
import java.io.Serializable;
public class Student implements Serializable{
private int id;
private String name;
private String sex;
private int age;
private String phone;
public Student() {}
public Student(int id,String name,String sex,int age,String phone) {
this.id=id;
this.name=name;
this.sex=sex;
this.age=age;
this.phone=phone;
}
public String toString () {
return this.getId()+"\t"+this.getName()+"\t"+this.getSex()+"\t"+this.getAge()+"\t"+this.getPhone();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
package com.newcapec.collection;
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
public static void main(String[] args) {
Student student1=new Student(1,"张三","男",20,"17803850000");
Student student2=new Student(2,"李四","男",22,"16892340002");
Student student3=new Student(3,"王五","男",23,"13522374728");
Student student4=new Student(4,"赵花花","女",19,"18642348990");
Student student5=new Student();
student5.setId(5);
student5.setName("小红");
student5.setSex("女");
student5.setAge(21);
student5.setPhone("17731671123");
ListstuLists=new ArrayList();
stuLists.add(student1);
stuLists.add(student2);
stuLists.add(student3);
stuLists.add(student4);
stuLists.add(student5);
System.out.println("id\t姓名\t性别\t年龄\t手机号");
for(Student s:stuLists) {
System.out.println(s.toString());
}
System.out.println("**************************************");
System.out.println("id\t姓名\t性别\t年龄\t手机号");
for(int i=0;i
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。
Map是一个接口,HashMap是Map的实现类之一。
主要方法:
1 | void clear( ) 从此映射中移除所有映射关系(可选操作)。 |
2 | boolean containsKey(Object k) 如果此映射包含指定键的映射关系,则返回 true。 |
3 | boolean containsValue(Object v) 如果此映射将一个或多个键映射到指定值,则返回 true。 |
4 | Set entrySet( ) 返回此映射中包含的映射关系的 Set 视图。 |
5 | boolean equals(Object obj) 比较指定的对象与此映射是否相等。 |
6 | Object get(Object k) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 |
7 | int hashCode( ) 返回此映射的哈希码值。 |
8 | boolean isEmpty( ) 如果此映射未包含键-值映射关系,则返回 true。 |
9 | Set keySet( ) 返回此映射中包含的键的 Set 视图。 |
10 | Object put(Object k, Object v) 将指定的值与此映射中的指定键关联(可选操作)。 |
11 | void putAll(Map m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。 |
12 | Object remove(Object k) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 |
13 | int size( ) 返回此映射中的键-值映射关系数。 |
14 | Collection values( ) 返回此映射中包含的值的 Collection 视图。 |
例子:
package com.newcapec.collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo3 {
public static void main(String[] args) {
Map maps=new HashMap<>();
maps.put("郑州", "450000");
maps.put("洛阳", "453500");
maps.put("濮阳", "451111");
maps.put("濮阳", "457000");
maps.put("安阳", "440000");
//map一个key只对应一个value,相同key会覆盖value数据
String value=maps.get("濮阳");
System.out.println("濮阳的邮政编码是:"+value);
System.out.println(maps.size());
//maps.remove("洛阳");
//System.out.println(maps.size());
System.out.println("*****************Set遍历数据*****************");
//通过Set拿到key,再通过key拿到value
Set keys=maps.keySet();//拿到所有key值得集合
System.out.println("Set方式一:");
Iterator is=keys.iterator();
while(is.hasNext()) {
String key=is.next();
String v=maps.get(key);//再通过key拿到value
System.out.println(key+"的邮政编码是:"+v);
}
System.out.println("Set方式二:");
for(String key:keys) {
String v=maps.get(key);//再通过key拿到value
System.out.println(key+"的邮政编码是:"+v);
}
System.out.println("*****************Collection遍历数据*****************");
//通过Collection拿到value,也只能拿到value
Collection vs=maps.values();
System.out.println("Collection方式一:");
Iterator vi=vs.iterator();
while(vi.hasNext()) {
String result=vi.next();
System.out.println("邮政编码为:"+result);
}
System.out.println("Collection方式二:");
for(String result:vs) {
System.out.println("邮政编码为:"+result);
}
}
}
濮阳的邮政编码是:457000
4
*****************Set遍历数据*****************
Set方式一:
安阳的邮政编码是:440000
洛阳的邮政编码是:453500
濮阳的邮政编码是:457000
郑州的邮政编码是:450000
Set方式二:
安阳的邮政编码是:440000
洛阳的邮政编码是:453500
濮阳的邮政编码是:457000
郑州的邮政编码是:450000
*****************Collection遍历数据*****************
Collection方式一:
邮政编码为:440000
邮政编码为:453500
邮政编码为:457000
邮政编码为:450000
Collection方式二:
邮政编码为:440000
邮政编码为:453500
邮政编码为:457000
邮政编码为:450000
比HashMap效率稍低,但是线程安全。
用法:和HashMap一样,把HashMap改成Hashtable就行了。注意t是小写= =!!