文章目录
一、单例集合框架各个接口与类的层次结构
- 单列集合体系结构:
1、Collection 接口
Collection 接口是所有单列集合的父接口,因此在单列集合中定义的List和set通用的一些方法,这些方法可以操作所有的单列集合。方法如下:
- Collection 集合常用方法
-
public boolean add(E e); 向集合中添加元素
-
public boolean remove(E e); 删除集合中的某个元素
-
boolean removeAll(Collection c):移除一个集合的元素
-
public void clear(); 清空集合中所有的元素
-
public boolean contains(); 判断集合中是否含有xxx元素
-
public boolean isEmpty(); 判断集合是否为空
-
public int size(); 计算集合的长度
-
public Object[] toArray(); 将集合转成一个数组
-
Demo代码示例:
public class Demo_Collection {
public static void main(String[] args) {
Collection coll = new ArrayList();
/*
1:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
*/
coll.add(2);
coll.add("djf");
coll.add(coll);
coll.add(34);
coll.add(33);
/*
// 2:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素
*/
//coll.clear();//这里给注释了,不然集合中数据清空
coll.remove(0);
coll.removeAll(coll);
System.out.println(coll.isEmpty());//判断集合是否为空
System.out.println("=================================");
System.out.println(coll.toString());//转换成字符串
System.out.println("=================================");
System.out.println(coll.iterator());//获取功能
System.out.println("=================================");
System.out.println(coll.size());//元素的个数
System.out.println("=================================");
System.out.println(coll.contains(coll));//判断集合中是否包含指定的集合元素
System.out.println("=================================");
Object[] obj = coll.toArray();//把集合转换为数组
System.out.print("{");
for (int i = 0; i < obj.length; i++) {
if(i == obj.length -1){
System.out.print(obj[i]);
}else {
System.out.print(obj[i]+",");
}
}
System.out.println("}");
System.out.println("=================================");
}
}
运行结果:
2、List 集合体系
List集合:在使用该集合添加元素时,集合中的元素都是有序的,并且元素的内容是可以重复的。
每个元素都有索引,可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
注:实际开发中常用的是 ArrayList 集合。
-
List 接口中的成员方法
-
添加功能
- void add(int index,Object element):在指定位置添加元素
-
获取功能
- Object get(int index):获取指定位置的元素
-
删除功能
- Object remove(int index):根据索引删除元素,返回被删除的元素
-
修改功能
- Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
-
- List 接口有三个子类对象:
-
ArrayList 集合—— 添加元素,是有序,可重复,有索引的。(重点掌握)
-
LinkedList 集合—— 添加元素,是有序,可重复,有索引的。(次之)
-
Vector 集合—— 查询快,增删慢;运行效率慢、线程安全。 (了解)
-
1、ArrayList 类 (重点掌握)
- ArrayList 集合 :
- 底层数据结构是数组,查询快,增删慢。
- 线程不安全,效率高。
Demo代码示例:
import java.util.ArrayList;
import java.util.List;
public class Demo_ArrayList {
public static void main(String[] args) {
List list = new ArrayList();
List list = new ArrayList();
list.add(111);//添加集合中的元素
list.add(1,222);//在指定位置添加元素
list.add(2,"ef");
list.add(list);
list.add(333);
list.add(333);
list.add(333);
//JDK5之后便开始自行封装
// 等同于:list.add(Integer.valueOf(333));
System.out.println("集合中的元素有:"+list);
System.out.println("=======================");
list.remove(4);//删除指定下标的元素
System.out.println("删除集合中下标为4的元素:"+list);
System.out.println("=======================");
System.out.println("获取集合中下标为2的元素:"+list.get(2));//获取指定位置的元素
System.out.println("=======================");
list.set(0,100);//修改指定下标的元素
System.out.println("将下标为0的元素进行修改:"+list);
}
}
运行结果:
2、LinkedList 类
-
LinkedList 类 的成员方法
-
添加功能
- public void addFirst(E e); 将指定的元素插到列表开头。
- public void addLat(E e); 将指定的元素插到列表结尾。 此方法等效于add()方法
- public void push(E e); 将元素推入此列表所示的堆栈。 此方法等效于addFirst()方法
-
获取功能
- public E getFirst(); 返回此列表的第一个元素
- public E getLast(); 返回此列表的最后一个元素
-
删除功能
- public E removeFirst(); 移除并返回此列表的第一个元素
- public E removeLast(); 移除并返回此列表的最后一个元素
-
修改功能
- Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
- Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
-
判断功能
- public boolean isEmpty(); 如果列表为空 返回true
-
Demo代码示例:
import java.util.LinkedList;
public class sss {
public static void main(String[] args) {
show01();
show02();
show03();
}
public static void show01(){
// 注:LinkedList特有的方法不能使用多态!
// List<String> list = new LinkedList<>(); 是不对的
LinkedList<String>list = new LinkedList<>();
// add()添加元素
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);//[a, b, c]
//addFirst(E e); 将指定的元素插到列表开头。
list.addFirst("hhh");
//public void push(E e); 将元素推入此列表所示的堆栈。 等效于addFirst()
list.push("hhh");
System.out.println(list);
//addLast(E e); 将指定的元素插到列表结尾。 等效于add()
list.addLast("com");
System.out.println(list);
}
public static void show02(){
LinkedList<String>list = new LinkedList<>();
// add()添加元素
list.add("a");
list.add("b");
list.add("c");
// list.clear(); // 清空集合中所有元素
if(! list.isEmpty()){
// public E getFrist(); 返回此列表的第一个元素
System.out.println(list.getFirst());//a
// public E getLast(); 返回此列表的最后一个元素
System.out.println(list.getLast());//c
}
}
/*
public E removeFrist(); 移除并返回此列表的第一个元素
public E removeLast(); 移除并返回此列表的最后一个元素
public E pop(E e); 入此列表所示的堆栈中弹出一个元素。
*/
public static void show03(){
LinkedList<String>list = new LinkedList<>();
// add()添加元素
list.add("a");
list.add("b");
list.add("c");
System.out.println(list.pop());
//public E pop(E e); 入此列表所示的堆栈中弹出一个元素。 等效于 removefirst()
//System.out.println(list.pop());
System.out.println(list.removeFirst());//a
System.out.println(list.removeLast());//c
System.out.println(list);//[b]
}
}
运行结果:
注:使用 LinkedList 集合特有的方法,不能使用多态。
3、Vector 类(了解一下即可)
- Vector 集合:
- 底层数据结构是数组,查询快,增删慢。
- 线程安全,效率低。
Vector 类独有的成员方法:
- 添加功能
- public void addElement(Object obj)
- 获取功能
- public Object elementAt(int index)
- public Enumeration elements()
Demon 代码示例:
public class VectorDemo {
public static void main(String[] args) {
// 创建集合对象
Vector v = new Vector();
// 添加功能
v.addElement("hello");
v.addElement("world");
v.addElement("java");
System.out.println(v);
System.out.println("=========================================");
System.out.println(v.elements());//获取对象
System.out.println("=========================================");
System.out.println(v.elementAt(2));
}
}
3、Set 集合体系
Set 集合的特点:向集合中添加的元素,是无序的,不可重复的,无索引的(索引的操作不能用)。
- Set 接口有三个子类对象:
-
HashSet 集合—— 添加的元素,是无序的,不重复的,无索引的。(重点掌握)
-
LinkedHashSet 集合—— 添加的元素,是有序的,不重复的,无索引的。(次之)
-
TreeSet 集合—— 不重复,无索引,按照大小默认升序排序!!(可排序集合)(废弃)
-
1、HashSet 类 (重点掌握)
Set 集合的使用方式和 List 集合一样,只有数据存储的形式不一样。
Demo代码示例:
public class HashSetDemo {
public static void main(String[] args) {
// 创建集合对象
HashSet<String> hs = new HashSet<String>();
// 创建并添加元素
hs.add("hello");
hs.add("world");
hs.add("java");
hs.add("world");
System.out.println(hs);
}
}
运行结果:
查看结果可知,集合中的元素并没有按照存储顺序来存储,并且相同的数据也没有成功。
2、LinkedHashSet 类
- 概述
- 底层数据结构由哈希表和链表组成
- 由链表保证元素有序(存储和取出是一致)
- 由哈希表保证元素唯一性
Demo代码示例:
import java.util.LinkedHashSet;
public class HashSetDemo {
public static void main(String[] args) {
// 创建集合对象
LinkedHashSet<String> hs = new LinkedHashSet<String>();
// 创建并添加元素
hs.add("hello");
hs.add("world1");
hs.add("java1");
hs.add("world2");
hs.add("world");
hs.add("java");
hs.add("world");
System.out.println(hs);
}
}
运行结果: