Java集合类型分为Collection和Map。所有的Java集合都在java.util包中
学习Java中的集合,首先从接口入手,重点掌握List,Set,Map三个接口。
1.List集合
List集合中的元素是有序的,可以重复出现。
List接口的实现类有ArrayList和LinkedList。ArrayList是基于动态数组数据结构的实现,LinkedList是基于链表数据结构的实现。
常用方法:
import java.util.ArrayList;
import java.util.List;
public class List_method{
public static void main(String[] args) {
List list=new ArrayList();
String b="B";
//向集合中添加元素
list.add("A");
list.add(b);
list.add("C");
list.add(b);
list.add("D");
//打印集合元素个数
System.out.println("集合size="+list.size());
//打印集合
System.out.println(list);
//从前往后查找集合中的"B"元素
System.out.println("indexOf(\"B\")="+list.indexOf(b));
//从后往前查找集合中的"B"元素
System.out.println("indexOf(\"B\")="+list.lastIndexOf(b));
//删除集合中的第一个"B"元素
list.remove(b);
System.out.println("删除第1个B后:"+list);
//删除第4个元素
list.remove(3);
System.out.println("删除第4个元素后:"+list);
//判断集合是否为空
System.out.println("list集合是空的:"+list.isEmpty());
//替换集合第二个元素
System.out.println("替换前:"+list);
list.set(1, "F");
System.out.println("替换后:"+list);
//清空集合
list.clear();
System.out.println(list);
//重新添加元素
list.add(1); //发生自动装箱
list.add(2);
int item=(Integer)list.get(0); //发生自动拆箱
}
}
在Java中任何集合中存放的都是对象,即引用数据类型,基本数据类型不能放到集合中。但上述代码将整数放到集合中,是因为这个过程发生了自动装箱,整数1被封装成Integer对象1,然后再放到集合中。相反从集合中取出的是Integer对象,之所以能够赋值给int类型,是因为这个过程发生了自动拆箱。
遍历集合:
List遍历有三种方法:
(1)使用for循环遍历。
(2)使用增强for循环遍历。推荐使用这种遍历方法。
(3)使用迭代器遍历。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class List_iter {
public static void main(String[] args) {
List list=new ArrayList();
String b="B";
//向集合中添加元素
list.add("A");
list.add(b);
list.add("C");
list.add(b);
list.add("D");
//1.使用for循环遍历
for(int i=0;i<list.size();i++)
{
System.out.printf("读取集合元素(%d):%s\n",i,list.get(i));
//println不允许这种形式写法
}
//2.使用增强for循环遍历
for(Object item:list)
{
String s=(String)item;
System.out.println("读取集合元素:"+s);
}
//3.使用迭代器遍历
Iterator it=list.iterator();
while(it.hasNext())
{
Object item=it.next();
String s=(String)item;
System.out.println("读取集合元素:"+s);
}
}
}
2.Set集合
Set集合是无序的,集合中元素不能重复出现。
Set接口直接实现类主要是HashSet,HashSet是基于散列表数据结构的实现。
常用方法:
import java.util.HashSet;
import java.util.Set;
public class Set_method {
public static void main(String[] args) {
Set set=new HashSet();
String b="B";
//向集合中添加元素
set.add("A");
set.add(b);
set.add("C");
set.add(b); //不能重复添加元素,无效。
set.add("D");
set.add("E");
//打印集合元素个数
System.out.println("集合size="+set.size());
//打印集合
System.out.println(set);
//删除集合中"B"元素
set.remove(b);
//判断集合中是否包含B元素
System.out.println("是否包含\"B\":"+set.contains(b));
//判断集合是否为空
System.out.println("set集合是空的:"+set.isEmpty());
//清空集合
set.clear();
System.out.println(set);
}
}
遍历集合:
Set集合中的元素由于没有序号,所以不能使用for循环进行遍历,但可以使用增强for循环和迭代器进行遍历。事实上,这两种遍历方式都是继承自Collection集合,也就是说,所有的Collection集合类型都有这两种遍历方式。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Set_iter {
public static void main(String[] args) {
Set set=new HashSet();
String b="B";
//向集合中添加元素
set.add("A");
set.add(b);
set.add("C");
set.add(b); //不能重复添加元素,无效。
set.add("D");
set.add("E");
//1.使用增强for循环遍历
for(Object item:set)
{
String s=(String)item;
System.out.println("读取集合元素:"+s);
}
//2.使用迭代器遍历
Iterator it=set.iterator();
while(it.hasNext())
{
Object item=it.next();
String s=(String)item;
System.out.println("读取集合元素:"+s);
}
}
}
3.Map集合
Map集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是Set类型,因此不能有重复的元素。而值集合是Collection类型,可以有重复的元素。Map集合中的键和值是成对出现的。
Map接口直接实现类主要是HashMap,HashMap是基于散列表数据结构的实现。
常用方法:
import java.util.HashMap;
import java.util.Map;
public class Map_method {
public static void main(String[] args) {
Map map=new HashMap();
map.put(102, "张三");
map.put(105, "李四");
map.put(109, "王五");
map.put(110, "董六");
map.put(111, "李四"); //李四 值重复
map.put(109, "刘备"); //109 键已经存在,替换原来王五
//打印集合元素个数
System.out.println("集合size="+map.size());
//打印集合
System.out.println(map);
//通过键取值
System.out.println("109-"+map.get(109));
System.out.println("108-"+map.get(108));
//删除键值对
map.remove(109);
//判断键集合中是否包含109
System.out.println("键集合中是否包含109:"+map.containsKey(109));
//判断值集合中是否包含李四
System.out.println("值集合中是否包含李四:"+map.containsValue("李四"));
//判断值集合是否为空
System.out.println("集合是空的:"+map.isEmpty());
//清空集合
map.clear();
System.out.println(map);
}
}
遍历集合:
Map有两个集合,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,还可以同时遍历。这些遍历过程都可以使用增强for循环和迭代器进行遍历。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Map_iter {
public static void main(String[] args) {
Map map=new HashMap();
map.put(102, "张三");
map.put(105, "李四");
map.put(109, "王五");
map.put(110, "董六");
map.put(111, "李四");
//1.使用增强for循环遍历
//获得键集合
Set keys=map.keySet(); //keySet()返回Map中的所有键集合,返回值是Set类型
for(Object key:keys)
{
int ikey=(Integer)key; //自动拆箱
String value=(String)map.get(ikey); //自动装箱
System.out.printf("key=%d - value=%s \n",ikey,value);
}
//2.使用迭代器遍历
//获得值集合
Collection values=map.values(); //values()返回Map中的所有值集合,返回值是Collection类型
//遍历值集合
Iterator it=values.iterator();
while(it.hasNext())
{
Object item=it.next();
String s=(String)item;
System.out.println("值集合元素:"+s);
}
}
}