一、容器集合
1、对象容器集合
(1)数据结构:数据结构是以某种形式将数据组织在一起的合集(colection),数据结构不仅支持存储数据,还支持访问和处理数据。
(2)一种数据结构被认为是一个容器(container)。容器是一个能存储其他对象的对象,其他对象又被称为元素。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。
(3)分类:根据数据存储数据格式的不同,可以将集合分为两类。
- 一种是为了存储一个元素合集,简称合集(colection)。
- 另一种为了存储键/值对,称为映射表(map)。
1)合集(colection)子接口主要有Set、Queue和List等接口,每一种集合接口描述了一种数据结构。
2)colection接口是处理对象合集的根接口,colection接口提供了在集合中添加、查询、删除元素的基本操作。
二、合集
1、List
(1)List集合:其中的元素是有序的,可以重复出现。
(2)List接口的实现类:ArrayList和LinkedList。ArrayList是基于动态数据结构实现,LinkedList基于链表数据结构实现的。LinkedList所占内存空间比ArrayList大,批量插入或删除数据是优于ArrayList,ArrayList访问元素速度快。
1)ArrayList:用数组存储元素,数组是动态创建的。
2)LinkedList:用链表存储元素。
(3)常用方法:List接口继承自Collection接口,List常用的方法如下:
(4)List的应用举例
1)创建集合,并向集合中添加元素
import java.util.ArrayList;
import java.util.List;
public class Helloworld {
public static void main(String[] args) {
List list=new ArrayList();//创建集合
list.add("A");//向集合中添加元素
list.add("B");
list.add("C");
list.add("D");
list.add("E");
System.out.println(list);
}
}
声明List类型集合变量list,使用ArrayList类实例化list,List接口不能实例化。
2)统计集合长度
System.out.println("集合长度= "+list.size());
3)删除其中某个元素
删除指定元素
list.remove("B");
System.out.println("删除B元素后= "+list);
删除某个索引所在的元素
list.remove(1);
System.out.println("删除第1个元素后= "+list);
4)替换某个元素
list.set(1, "F");
System.out.println("替换元素后= "+list);
5)清空集合
list.clear();
System.out.println("清空集合后= "+list);
6)遍历集合
a.通过for循环遍历
for(int i=0;i<list.size();i++)
{
System.out.printf("读取集合元素(%d):%s \n",i,list.get(i));
}
b.使用for-each循环遍历
for(Object item :list)
{
String s=(String)item;
System.out.println("读取集合元素:" +s);
}
c.使用迭代器遍历
迭代器:每种合集都是可以迭代的,可以获得集合的Iterator对象来遍历合集中的所有元素。Collection接口继承自Iterable接口,Iterable接口定义了iterator方法,该方法会放回一个迭代器。
import java.util.Iterator;
Iterator it=list.iterator();//iterator()方法,返回一个Iterator的实例
while(it.hasNext())//hasNext()方法来检测迭代器中是否有更多的元素
{
Object item=it.next();//next()方法提供了对合集中元素的顺序访问
String s=(String)item;
System.out.println("读取集合元素:" +s);
}
2、Queue
(1)队列是一种先进先出的数据结构,元素被追加到队列末尾,然后从队头删除。
(2)Queue接口继承自Collection接口。
LinkedList类实现了Deque接口,Deque接口又继承自Queue接口,因此可以使用LinkedList创建一个队列。Deque(双端队列),可以实现从队列的两端插入和删除元素。
(3)应用举例
3、集合(set)
(1)集合(set)是一个用于存储和处理无重复元素的高效数据结构。 特点:由一串无序的、不能重复的相同类型元素构成的集合。Set接口扩展自Collection接口。
(2)Set接口直接实现类有三种:散列类HashSet、链式散列类LinkedHashSet和树形集TreeSet。Set接口直接实现的类主要是HashSet,它是基于散列表数据结构的实现。Set接口也继承自Collection接口,继承的方法如下:
(3)应用举例:
1)创建Set集合,并添加元素
Set set=new HashSet();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
set.add("F");
System.out.println(set);
2)循环遍历元素
a.使用for-each循环遍历
for(Object item :set)
{
String s=(String)item;
System.out.println("读取集合元素: "+s);
}
b.使用迭代器遍历
Iterator it=set.iterator();
while(it.hasNext()) {
Object item=it.next();
String s=(String)item;
System.out.println("读取集合元素 "+s);
}
三、映射表(map)
1、map:类似于目录,提供了使用键值快速查询和获取值的功能。map是一种依照键/值对存储元素的容器。、
键,很像是下标,键可以是任意类型的对象,但不能有重复的键。每个键对应一个值。
2、Map接口直接实现类有三种:散列映射表HashMap、链式散列映射表LinkedHashMap和树形映射表TreeMap。主要是HashMap,HashMap是基于散列表数据结构的实现。map接口提供的主要方法有:
3、应用举例
(1)创建集合,并添加元素
格式:v put(k key,v value) //让值与键相关联,相当于添加键值对
注意map集合中添加元素是,键值key是不允许重复的,而值value是允许重复的。
Map map =new HashMap();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
map.put("4", "D");
map.put("1", "E");
System.out.println(map);
注意map键值不允许重复。
(2)向map集合添加指定集合的所有元素
Map map1 =new HashMap();
map1.put("1", "A");
map1.put("2", "B");
map1.put("3", "C");
map1.put("4", "D");
map1.put("1", "E");
System.out.println("集合1的元素为 "+map1);
Map map2 =new HashMap();
map2.put("5", "F");
map2.put("6", "G");
map1.putAll(map2);
System.out.println("集合2的元素为 "+map2);
System.out.println("集合1的元素为 "+map1);
(3)清空集合所有键值
map1.clear();
System.out.println("清空后集合1的元素为 "+map1);
(4)遍历集合
Map有两个集合,可以遍历值的集合,也可以遍历键的集合,也可以同时遍历。
a.使用for-each 循环遍历
Map map1 =new HashMap();
map1.put(1, "A");
map1.put(2, "B");
map1.put(3, "C");
map1.put(4, "D");
map1.put(5, "E");
System.out.println("集合1的元素为 "+map1);
Set keys =map1.keySet();
for(Object key :keys)
{
int ikey =(Integer) key;//自动拆箱
String value=(String)map1.get(ikey);//自动装箱
System.out.printf("Key=%d Value=%s \n",ikey,value);
}
b.使用迭代器遍历
Collection values=map1.values();//获得值集合
//遍历值集合
Iterator it=values.iterator();
while(it.hasNext()) {
Object item =it.next();
String s=(String)item;
System.out.println("值集合元素: " +s);
}