Java集合框架
Java中集合的定义在java.util包下,主要有三大类:
java.util.Set接口及子类,Set提供的是一个无序、不可重复的集合,常用的实现类有HashSet,TreeSet,LinkedSet
java.util.List接口及子类,List提供的是一个有序、可存重复数据的集合,常用的实现类有ArrayList,Vector,LinkedList
java.util.Map接口及子类,Map提供了一个映射关机的集合,其中key不可重复,value可重复,常用的实现类有HashMap,Hashtable
其他常用的还有:Collection,Iterator,ListIterator,Enumeration,
SortedSet,SortedMap,Queue,Map.Entry
Set和List都是继承了Collection接口的子接口,而Map是独立的集合接口,没有父类。
Collection中定义的如下方法,在Set或List的实现类中都可以使用:
boolean add(E e)
向列表的尾部添加指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c)
添加指定 collection 中的所有元素到此列表的结尾,顺序是指定
collection 的迭代器返回这些元素的顺序(可选操作)。
void clear()
从列表中移除所有元素(可选操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素o,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean equals(Object o)
比较此 collection 与指定对象是否相等。
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素
(可选操作)。
int size()
返回此 collection 中的元素数。
Object[] toArray()
返回包含此 collection 中所有元素的数组。
一、List
List的主要特征是其对象以线性方式存储,没有"特定"顺序,只有一个开头和一个结尾,它与根本没有顺序的集是不同的。List接口提供了多个实现的子类,提供有序的访问集合中元素的方法——可根据List中对象放入时的次序来查找对象。
List子类还有几个特有的方法:
boolean addAll(int index,Collection<? extends E> c)
将指定 collection 中的所有元素都插入到列表中的指定位置。
E get(int index)
返回列表中指定位置的元素。
public class ListTest {
/**
* 主方法
* @param args
*/
public static void main(String[] args){
ListTest lt = new ListTest();
List<Student> list = lt.createList(20);
System.out.println("所有学生信息:");
lt.print(list);
System.out.println("查找到的学生信息:");
lt.queryStudent(list, 15);
System.out.println("删除分数小于10的学生后的信息:");
lt.deleteStudent(list, 10);
lt.print(list);
}
/**
* 创建一个List集合对象,并设置一定的初始值
* @param size
* @return
*/
public List<Student> createList(int size){
//实例化一个List集合的对象
List<Student> list = new ArrayList<Student>();
Random rd = new Random();
//循环size次数,并给list集合添加size个学生对象
for(int i=0;i<size;i++){
String name = "学生"+((char)(65+i));
list.add(new Student(name,rd.nextInt(20)));
}
return list;
}
/**
* 查找学生信息的方法
* @param list
* @param score
*/
public void queryStudent(List<Student> list,double score){
for(int i=0;i<list.size();i++){
Student stu = list.get(i);
if(stu.getScore()==score){
System.out.println(stu.toString());
}
}
}
/**
* 删除分数小于10的学生信息
* @param list
* @param score,删除时要比较的分数
*/
public void deleteStudent(List<Student> list,double score){
System.out.println("=========================>");
for(int i=0;i<list.size();i++){
Student stu = list.get(i);
if(stu.getScore()<score){
list.remove(i);
i--;
}
}
}
/**
* 打印学生信息
*/
public void print(List<Student> list){
for(int i=0;i<list.size();i++){
Student stu = list.get(i);
System.out.println(stu.toString());
}
}
}
二、Set
Set提供的是无序的集合,不能根据索引取,需要用到迭代器。查找、删除、打印方法都有所不同。
public class SetTest {
/**
* 主方法
* @param args
*/
public static void main(String[] args){
SetTest st = new SetTest();
Set<Student> set = st.createSet(20);
System.out.println("所有学生信息");
st.print(set);
System.out.println("查找到的学生信息:");
st.queryStudent(set, 15);
System.out.println("删除分数小于10的学生后的信息:");
st.deleteStudent(set, 10);
st.print(set);
}
/**
* 创建一个Set集合对象,并设置一定的初始值
* @param size
* @return
*/
public Set<Student> createSet(int size){
//实例化一个Set集合的对象
Set<Student> set = new HashSet<Student>();
Random rd = new Random();
//循环size次数,并给set集合添加size个学生对象
for(int i=0;i<size;i++){
String name = "学生"+((char)+(65+i));
set.add(new Student(name,rd.nextInt(20)));
}
return set;
}
/**
* 查找分数为15的学生,并输出信息
* @param set
* @param score
*/
public void queryStudent(Set<Student> set,double score){
//获取Set集合的迭代器对象,Set集合中的对象是无序的,无法根据下标查找
Iterator<Student> iter = set.iterator();
while(iter.hasNext()){
Student stu = iter.next();
if(stu.getScore()==score){
System.out.println(stu.toString());
}
}
}
/**
* 删除分数小于10的学生信息
* @param set
* @param score
*/
public void deleteStudent(Set<Student> set,double score){
//获取Set集合的迭代器
Iterator<Student> iter = set.iterator();
//再新建一个Set集合,用来存放需要需要删除的对象
Set<Student> s = new HashSet<Student>();
while(iter.hasNext()){
Student stu = iter.next();
if(stu.getScore()<score){
// System.out.println(stu.getScore());
s.add(stu);
}
}
set.removeAll(s);
}
/**
* 打印学生信息
* @param set
*/
public void print(Set<Student> set){
Iterator<Student> iter = set.iterator();
while(iter.hasNext()){
Student stu = iter.next();
System.out.println(stu.toString());
}
}
}
三、Map
Map中存入的对象是一对一对的,即每个对象和它的名字(键)关联在一起。其中键key是不可重复的,值value可以重复。
在Map集合中使用Set集合获取key,再对key使用迭代器。
常用的方法有:
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size()
返回此映射中的键-值映射关系数。
Set<K> keySet()
返回此映射中包含的键的 Set 视图。
Collection<V> values()
返回此映射中包含的值的 Collection 视图。
public class MapTest {
/**
* 主方法
* @param args
*/
public static void main(String[] args){
MapTest mt = new MapTest();
Map<String,Student> map = mt.createMap(20);
System.out.println("所有学生信息:");
mt.print(map);
System.out.println("查找到的学生信息:");
mt.queryStudent(map, 15);
System.out.println("删除分数小于10后的学生信息");
mt.deleteStudent(map, 10);
mt.print(map);
}
/**
* 创建一个Map集合对象,并设置一定的初始值
* @param size
* @return
*/
public Map<String,Student> createMap(int size){
Map<String,Student> map = new HashMap<String,Student>();
Random rd = new Random();
for(int i=0;i<size;i++){
String name = "学生"+((char)+(65+i));
Student stu = new Student(name,rd.nextInt(20),"2012"+(i+1));
map.put(stu.getNumber(), stu);
}
return map;
}
/**
* 查找分数为15的学生,并输出信息
* @param map
* @param score
*/
public void queryStudent(Map<String,Student> map,double score){
//获取到map集合的KeySet
Set<String> set = map.keySet();
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
//获取下一个元素
String key = iter.next();
//根据key获取value
Student stu = map.get(key);
if(stu.getScore()==score){
System.out.println(stu.toString());
}
}
}
/**
* 删除分数小于10的学生的信息
* @param map
* @param score
*/
public void deleteStudent(Map<String,Student> map,double score){
//set集合对象存储map的key
Set<String> set = map.keySet();
Iterator<String> iter = set.iterator();//迭代器指向set集合对象
//用来存放需要删除的stu对象
Set<String> s = new HashSet<String>();
while(iter.hasNext()){
String key = iter.next();
Student stu = map.get(key);
if(stu.getScore()<score){
s.add(key);
}
}
//迭代器指向s集合对象
iter = s.iterator();
while(iter.hasNext()){
String key = iter.next();
map.remove(key);
}
}
/**
* 打印学生信息的方法
* @param map
*/
public void print(Map<String,Student> map){
Set<String> set = map.keySet();
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
String key = iter.next();
Student stu = map.get(key);
System.out.println(stu.toString());
}
}
}
如有不足欢迎指正!
分享到:
相关推荐
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...