Java中的集合类
Collection接口
- 一组称为元素的对象
- 一个Collection中可以放不同类型的数据
- 是Set接口和List接口的父类
- 是否有特定的顺序以及是否允许重复,取决于它的实现
Set - 无序的集合;不允许重复
–HashSet
–TreeSet
List - 有序的集合;允许重复
– ArrayList
– LinkedList
Collection接口的常用方法
boolean add(Object)
集合中加入一个对象,成功时返回true
//实例化一个集合类型的数组列表
Collection list = new ArrayList();
//忘记和里面添加一个对象
list.add("添加一个对象");
boolean addAll(Collection)
集合中加入另外一个集合对象
//往集合里面添加N个对象
Collections.addAll(list, "farewef",222,true,"中文",2.3333);
int size()
集合内容纳的元素数量
//集合的元素个数
System.out.println(list.size());
boolean isEmpty()
集合是否为空
System.out.println(list.isEmpty()); //为空返回true,不为空返回false
boolean contains(Object)
集合内是否含有参数对象
//判断集合中是否含有222这个对象,有返回true,没有放回false
System.out.println(list.contains(222));
Iterator iterator()
产生一个迭代器。任何类型的Collection,都支持一个iterator()的方法,该方法返回一个迭代器,使用该迭代
器即可逐一访问Collection中每一个元素。
//实例化一个集合类型的数组列表
Collection list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) {
Object i = it.next();
System.out.println(i); //在控制台逐一输出集合中的对象,相当for与遍历数组
}
Object[] toArray()
返回一个包含所有元素的对象数组
Object o = new Object();
o = list.toArray();
boolean remove(Object)
从集合中删除对象
list.remove(222); //成功返回true,不成功返回false
boolean removeAll(Collection)
清空指定集合
boolean containsAll(Collection)
判断集合内是否包含子集
Collection list = new ArrayList();
Collection list2 = new ArrayList();
//往集合里面添加N个对象
Collections.addAll(list, list2,"farewef",222,true,"中文",2.3333);
System.out.println(list.contains(list2)); //true 存在返回true,不存在返回falses
boolean retainAll(Collection)
仅保留此 collection 中那些也包含在指定 collection 的元素
void clear() 清空集合
Set接口
- Collection的子接口
- 用来包含一组 无序无重复 的对象
无序 — 是指元素存入顺序和集合内存储的顺序不同;
无重复 — 两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复,在set中只保留一个。 - Set接口的实现类
HashSet — HashSet的特性在于其内部对象的散列存取,即采用哈希技术
TreeSet — TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的
List接口
- Collection的子接口
- 用来包含一组 有序有重复 的对象
- List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素
- List有两种主要的集合实现类:
ArrayList
LinkedList
两个实现类的区别:
- ArrayList
ArrayList是线性顺序存储的,是一种线性表
它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的 - LinkedList
是数据结构中链表的java实现
相对于List来说,LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的Stack(栈)、queue(队列)等
Map接口
- Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
- Map是不同于Collection的另外一种集合接口
- Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
- 两个实现类
HashMap
TreeMap
HashMap与TreeMap的比较
- HashMap基于哈希表实现。
- TreeMap基于树实现。
- HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。
- TreeMap没有调优选项,因为该树总处于平衡状态
-HashMap性能优于TreeMap。
HashMap与Hashtable的比较:
- Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
- Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许用null。
常用方法:
方法 | 含义 |
---|---|
Object put(Object key,Object value) | 将指定的值与此映射中的指定键相关联 |
void putAll(Map t) | 将映射t中所有映射关系复制到此映射中 |
Object get(Object key) | 返回此映射中映射到指定键的值 |
Object remove(Object key) | 若存在此键的映射关系,将其从映射中移除 |
boolean containsKey(Object key) | 若此映射包含指定键的映射关系,返回 true |
boolean containsValue(Object value) | 若此映射为指定值映射一个或多个键,返回true |
int size() | 返回此映射中的键-值映射对数 |
void clear() | 从此映射中移除所有映射关系 |
boolean isEmpty() | 若此映射未包含键-值映射关系,返回 true |
Set keySet() | 返回此映射中包含的键的 set 视图 |
下面是set集合、list集合和map集合的demo
set集合Demo
package com.neuedu.chapter02._集合;
import java.util.HashSet;
import java.util.TreeSet;
public class SetDemo {
public static void main(String[] args) {
//构造一个新的set集合
HashSet hset = new HashSet();
//添加元素
hset.add(null);
hset.add(true);
hset.add("只能问");
hset.add("hhiuhhh");
hset.add(41243); //自动装箱为Integer
hset.add('q');
//使用foreach方式遍历set集合
for (Object i : hset) {
System.out.println(i);
}
System.out.println(hset);
//实例化一个TreeSet的集合对象
TreeSet tset = new TreeSet();
tset.add("hello");
tset.add("hello");
tset.add("q");
tset.add("w");
tset.add("e");
tset.add("r");
tset.add("t");
tset.add("y");
System.out.println(tset);
//因为存储的顺序是有序的,所以可以用for循环去遍历它
for (Object i : tset) {
System.out.print(i+" ");
}
}
}
List集合Demo
package com.neuedu.chapter02._集合;
import java.util.ArrayList;
import java.util.LinkedList;
public class ListDemo {
public static void main(String[] args) {
//创建对象
ArrayList alist = new ArrayList();
alist.add(null);
alist.add(true);
alist.add("只能问");
alist.add("hhiuhhh");
alist.add(41243); //自动装箱为Integer
alist.add('q');
alist.add('q');
alist.add('q');
System.out.println(alist);
//在列表中的index位置,添加element元 素
alist.add(1,"BB");
//返回列表中指定位置的元素
System.out.println(alist.get(1));
//在list中查询元素的索引值,如不存在,返回-1。
System.out.println(alist.indexOf("只能问")); //查找“只能问”这个元素在集合索引值
System.out.println(alist);
for (Object i : alist) {
System.out.println(i);
}
LinkedList llist = new LinkedList();
llist.add(null);
llist.add(true);
llist.add("只能问");
llist.add("hhiuhhh");
llist.add(41243); //自动装箱为Integer
llist.add('q');
llist.add('q');
llist.add('q');
System.out.println(llist);
llist.addFirst("哈哈哈");
System.out.println(llist);
System.out.println(llist.getFirst());
llist.addLast("哈哈哈");
System.out.println(llist);
for (Object i : llist) {
System.out.print(i+" ");
}
}
}
map集合Demo
package com.neuedu.chapter02._集合;
import java.util.HashMap;
import java.util.TreeMap;
public class MapDemo {
public static void main(String[] args) {
HashMap hmap = new HashMap();
hmap.put(null,null);
hmap.put(null,null);
hmap.put("aaa","bbb");
hmap.put("ccc","ddd");
hmap.put("小莫",666);
hmap.put("羽毛球","林丹");
hmap.put("国家运动员","林丹");
System.out.println(hmap);
//复制map
HashMap map2 = new HashMap();
map2.putAll(hmap);
System.out.println(map2);
//获取键为“羽毛球”的值
System.out.println(hmap.get("羽毛球"));
//获取map中的键-值对的数量
System.out.println(hmap.size());
//判断值为 林丹 键是否存在
System.out.println(hmap.containsValue("林丹"));
//判断是否存在未包含键-值映射关系,有返回true,没有false
System.out.println(hmap.isEmpty());
//返回此映射中包含的键的 set 视图
System.out.println(hmap.keySet());
}
}