集合类与数组不同之处在于:数组长度是固定的,集合长度是可变的,数组用来存放基本类型的数据,集合用来存放对象的引用,常用集合有List集合,Set集合和Map集合,这里面List和Set继承了Collection接口;Map集合没有继承Collection接口,是key和values的映射,以键值对的形式存储数据。
Collection常用方法如下表所示,这些方法对List集合和Set集合是通用的:
方法 | 功能 |
add(E e) | 将制定对象添加到集合中 |
remove(Object o) | ...移除 |
isEmpty() | 返回boolean,集合是否为空 |
iterator() | 迭代器,用于遍历集合中对象 |
size() | 返回int型,集合元素个数 |
一、List接口及其实现的类
1、List接口
List接口集成Collection接口,包含Collection所有方法,还定义了
- get(int index):获得指定索引位置的元素
- set(int index,Object obj):将集合中指定索引位置对象改为指定对象
2、List接口的实现类
- ArrayList:实现可变数组,可以根据索引对集合元素进行快速的随机访问,缺点是在指定位置插入或者删除对象速度较慢
- LinkedList:采用链表接口存储
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// List list=new ArrayList<>();两种定义方法都可以
List<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
}
}
二、Set接口及其实现的类
1、Set接口
Set接口同样集成Collection接口,此外Set集合中的对象是不能包含重复对象的
2、Set接口的实现类
- HashSet:由哈希表(实际上是一个HashMap实例)支持,不保证Set迭代顺序,特别是不保证顺序恒久不变,允许null元素
- TreeSet:遍历时按照自然顺序递增排序,它不止实现Set接口,还实现了java.util.SortedSet接口
三、Map接口及其实现的类
1、Map接口
Map接口提供了将key映射到值的对象,一个映射不能包含重复key,每个key最多映射到一个值,常用方法如下表:
方法 | 描述 |
put(K key, V value) | 向集合中添加键值对 |
containsKey(Object key) | 映射中包含key,则返回true |
containsValue(Object value) | 映射中将一个或多个key映射到指定值,择返回true |
get(Object key) | 返回对应值 |
keySet() | 返回集合中key对象形成的Set集合 |
values() | 返回集合中value对象形成的Collection集合 |
entrySet() | 返回一个Map.Entry<k,v>类型的Set集合,可以使用getKey(),getValue(),setValue()方法,访问后者键值对 |
2、Map接口的实现类
- HashMap:提供所有可选的映射操作,并允许使用null值和键,但必须保证键的唯一性,不保证迭代顺序,特别是不保证顺序恒久不变
- TreeMap:不仅实现Map接口,还实现java.util.SortedMap接口
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
//这里先获取key集合,在二次访问map获取key对应value值
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
Set<String>set=map.keySet();//key的集合
Iterator<String>it =set.iterator();//key集合的迭代器
while(it.hasNext())//如果还有元素
{
String str=it.next();//指向下个元素
System.out.println(map.get(str));//map的get方法获取key对应的value
}
//这里直接获取map的keyvalue键值对,entrySet()集合的迭代器,来遍历,不需要map中二次取值
Iterator<Map.Entry<String, String>>it1=map.entrySet().iterator();
while(it1.hasNext())
{
Map.Entry<String, String> entry=it1.next();
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());
}
}
}
四、迭代器
迭代器是利用Iterator接口创建的,利用while循环遍历集合
- hasNext():循环判断条件,有元素可以迭代返回true;
- next():返回迭代的下一个元素