掌握集合类接口的常用方法
掌握集合类接口的实现类
掌握迭代器的创建和使用
一、集合类的概述
java.util包中提供了一些集合类,这些集合类又为容器。
数组与集合类:
数组:长度固定;用来存放基本类型的数据
集合类:长度可变;用来存放对象的引用
常用的集合类:
List、Set、Map
List集合和Set集合-->实现Collection<E>接口
常用集合的继承关系
HashMap(TreeMap)---> Map--->java.lang.Object
(HashSet/TreeSet--->set)/(ArrayList/LinkedList----->list)---->Collection--->java.lang.Object
二、集合类接口的方法
Collection接口是层次结构中的根接口。
构成Collection的单位-->元素
Collection接口不可直接使用,但该接口提供了添加、删除元素、管理数据的方法。
List Set实现了Collection接口,这些方法可以被List集合和Set集合是通用的。
2.1 List集合
List继承Collection接口,因此包含Collection中的所有方法。
又因为List是列表类型,所有List接口还提供了一些适合于自身的常用方法。
常用的方法:
void add(int index,E element)
在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果的话和所后续元素向右移动(在其索引中加 1)。
...查看api
List接口中适合于自身的方法都与索引有关。
由于List集合以线性方式存储对象,因此可以通过对象的索引来操作对象。
方法:
add(int index, E element)
在列表的指定位置插入指定元素(可选操作)。
set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。
LinkedList是链式的集合--LinkedList底层是由双向循环链表实现,里面的数据在逻辑上的存储是连续的,连续自然也就有顺序了
Iterator使用JDK提供的迭代接口进行Java集合的迭代。
----- 在Java中Iterator为一个接口,它只提供了迭代了基本规则,在JDK中他是这样定义的:对 collection 进行迭代的迭代器。
2.1.2 代码案例
创建集合对象,并向集合中添加元素,通过set()方法修改集合中元素,再通过add()方法向集合中添加元素,通过迭代器遍历集合元素。
package day16;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
String a = "A",b = "B",c = "C",d = "D",e = "E";//定义要插入的集合的字符串对象
List<String> list = new LinkedList<String>(); //创建List集合
list.add(a); //向集合中添加元素
list.add(d);
list.add(e);
@SuppressWarnings("unused")
Iterator<String> itr = list.iterator(); //创建集合的迭代器
System.out.print("修改之前的= ");
while(itr.hasNext()){ //遍历集合中的元素
System.out.print(itr.next()+" "); //循环获取集合中的元素
}
System.out.println();
/*E set(int index,
E element)*/
list.set(1, b);
list.set(2, c);
Iterator itr2 = list.iterator();
while(itr2.hasNext()) {
System.out.print("通过set修改之后的集合 = "+itr2.next()+" ");
}
}
}
运行结果:
修改之前的= A 修改之前的= D 修改之前的= E
通过set修改之后的集合 = A 通过set修改之后的集合 = B 通过set修改之后的集合 = C
2.1.3
创建List集合对象,通过add()方法向集合中添加元素,并将对象apple、b在集合中第一次与最后一次出现的索引位置输出。
代码案例:
package day16;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
/*创建List集合对象,通过add()方法向集合中添加元素,
并将对象apple、b在集合中第一次与最后一次出现的索引位置输出。*/
String a = "A",apple = "APPLE",b = "B",c = "C";
List<String> list = new ArrayList<String>();
list.add(a);
list.add(apple);
list.add(b);
list.add(b);
list.add(c);
list.add(c);
list.add(apple);
list.add(b);
System.out.print(list);
/*Iterator itr = list.iterator();
System.out.println("输出集合中的元素:");
while(itr.hasNext()) {
System.out.print(itr.next()+" ");
}*/
System.out.println();
System.out.println("apple的首次出现位置 = "+list.indexOf(apple));
System.out.println("apple的最后一次出现位置 = "+list.lastIndexOf(apple));
System.out.println("b的首次出现位置 = "+list.indexOf(b));
System.out.println("b的最后一次出现位置 = "+list.lastIndexOf(b));
}
}
运行结果:
[A, APPLE, B, B, C, C, APPLE, B]
apple的首次出现位置 = 1
apple的最后一次出现位置 = 6
b的首次出现位置 = 2
b的最后一次出现位置 = 7
java 集合ArrayList和LinkedList
1.ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
查询效率高,增删效率低 轻量级 线程不安全
2.LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是 查找非常麻烦 要丛第一个索引开始,线程安全 查询效率低,增删效率高
3.set集合
由于Set集合中不允许存在重复值,因此可以使用Set集合中的addAll()方法,将Collection集合添加到Set集合中并除掉重复的值。
创建一个List集合对象,并往List集合中添加元素。再创建一个Set集合,利用setAll()方法把List集合对象存入到Set集合中并除掉重复值,最后打印Set集合中的元素。
3.1代码案例:
package day16;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
/*创建一个List集合对象,并往List集合中添加元素。
再创建一个Set集合,利用setAll()方法把List集合对象存入到Set集合中并除掉重复值,
最后打印Set集合中的元素。*/
String a = "A",b = "B",c = "C";
List<String> list = new ArrayList<String>();//创建List集合对象
list.add(a); //向集合中添加元素
list.add(b);
list.add(c);
list.add(a);
Set<String> s = new HashSet<String>(); //创建set集合对象
s.addAll(list); //将List集合对象添加到Set集合对象中
Iterator<String> i = s.iterator(); //创建Set集合迭代器
System.out.println("Set集合输出: ");
while(i.hasNext()) {
System.out.print(i.next());
}
}
}
运行结果:
Set集合输出:
ABC
4.Map
4.1基础概念
Map接口提供了将键映射到值的对象。
一个映射不能包含重复的键;每个键最多只能映射到一个值。
由于Map集合中的元素是通过key、value进行存储的,要获取集合中指定的key值或value值,
需要先通过相应的方法获取key集合或 value集合,再遍历key集合或value集合获取指定值。
代码案例:
向一个Map集合中插入数据并根据key的值打印集合中的元素。
4.2代码案例
package day16;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
/*向一个Map集合中插入数据并根据key的值打印集合中的元素。*/
Map<String,String> map = new HashMap<String,String>();//创建Map集合
map.put("1", "apple"); //像集合中添加对象
map.put("2", "pear");
map.put("3", "dooder");
for(int i = 1;i <= 3;i++){
System.out.println(map.get(""+i)); //输出对应位置的元素,(""+i)是将其转换为字符串
}
}
}
运行结果:
apple
pear
dooder
五、案例
Map集合可以保存键值映射关系,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息。
省市级的联动。
六、集合类接口的实现类
查看参考文档
七、迭代器
步骤
1.通过调用类集的iterator() 获得对类集的迭代方法
2.建立一个调用hasNext()
3.在循环体内部next() 返回迭代的下一个元素,来获得每一个元素。
java.util.Iterator<E>
子接口:
ListIterator<E>,
方法:
hasNext() 如果仍元素可以迭代,则返回 true。
next() 返回迭代的下一个元素。
remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
总结
重点掌握集合的遍历、添加对象、删除对象的方法。
星期二, 十一月 17, 2015 18:59:32