集合知识点
程序员文章站
2024-03-18 22:51:16
...
集合与数组一样,也是一个容器,与数组不同的是,集合的长度不定,可以无限的向集合中添加元素,而且集合中存储的元素类型可以随意。
集合的框架结构介绍
Map集合的框架结构
集合与数组的对比
相同点:
都是数据的容器,在一个数组或集合中可以声明(存储)多个数据
不同点:
元素:数组中的元素只能是相同(相兼容类型)
集合中的元素是任意的(泛型)
数组中可以存储基本类型和引用类型,集合只能存储引用类型
长度(元素个数):
数组是定长的,一旦初始化长度就不可以修改
集合长度可以修改,可以删除元素和添加元素
第二节 Collection接口
2.1 Collection中常用的方法
测试:
package a;
import java.util.*;
public class TestA {
static ArrayList<String> arr=new ArrayList<String>();
static ArrayList<String> x=new ArrayList<String>();
static void f1()//add
{
arr.add("HELLO");
arr.add("WORLD");
System.out.println(arr.toString());
}
static void f2()//addAll()
{
arr.add("HELLO");
arr.add("WORLD");
x.add("I LOVE");
x.add("MY L.I.F.E");
arr.addAll(x);
System.out.println(arr.toString());
}
static void f3()//clear()
{
arr.add("A");
arr.add("B");
System.out.println(arr.toString());
arr.clear();
System.out.println(arr.toString());
}
static void f4()//contains()
{
arr.add("ABC");
arr.add("DEF");
System.out.println(arr.contains("ABC"));
}
static void f5()//containsAll()
{
arr.add("ABC");
arr.add("DEF");
arr.add("IGH");
x.add("ABC");
x.add("IGH");
System.out.println(arr.containsAll(x));
System.out.println(x.containsAll(arr));
}
static void f6()//equals()
{
arr.add("AB");
arr.add("CD");
x.add("AB");
x.add("CD");
System.out.println(arr.equals(x));
}
static void f7()//isEmpty()
{
System.out.println(arr.isEmpty());
arr.add("AA");
System.out.println(arr.isEmpty());
}
static void f8()//iterator()
{
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
Iterator<String> it=arr.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
static void f9()//remove()
{
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
System.out.println(arr.toString());
arr.remove(0);//通过索引删除
System.out.println(arr.toString());
arr.remove("ABC");//通过元素删除,如果有重复的,每次只删除一个
System.out.println(arr.toString());
}
static void f10()//removeAll
{
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
x.add("ABC");
x.add("DEF");
System.out.println(arr.toString());
System.out.println(x.toString());
arr.removeAll(x);//删除arr中所有和x一样的元素
System.out.println(arr.toString());
System.out.println(x.toString());
}
static void f11()//retain()仅保留arr中和x内相同的元素
{
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
arr.add("666");
x.add("ABC");
x.add("DEF");
arr.retainAll(x);
System.out.println(arr.toString());
System.out.println(x.toString());
}
static void f12()//size()返回所含元素个数
{
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
arr.add("666");
System.out.println(arr.size());
}
static void f13()//toArray()转化为Object类型的数组
{
arr.add("ABC");
arr.add("DEF");
arr.add("GHI");
arr.add("666");
Object[] str= arr.toArray();
for(int i=0;i<=str.length-1;i++)
System.out.println(str[i].toString());
}
public static void main(String[] args) {
f13();
}
}
package a;
import java.util.*;
public class TestB//测试List接口中的方法,ArrayList是List的实现类
{
static List<String> list=new ArrayList<String>();
static List<String> x=new ArrayList<String>();
static void f1()//add(索引,值)
{
list.add(0,"ABC");
list.add(0,"DEF");//去了0索引,"ABC"整体后移
System.out.println(list.toString());
}
static void f2()//addAll(索引,集合类对象的引用)
{
list.add("AAA");
list.add("BBB");
list.add("CCC");
x.add("111");
x.add("222");
list.addAll(1,x);
System.out.println(list.toString());
}
static void f3()//get(索引)
{
list.add("AAA");
list.add("BBB");
list.add("CCC");
System.out.println(list.get(0));
}
static void f4()//indexOf() lastIndexOf()
{
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("AAA");
System.out.println(list.indexOf("BBB"));
System.out.println(list.lastIndexOf("AAA"));
System.out.println(list.indexOf("666"));
}
static void f5()//set(索引,要改为的值) 修改
{
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("AAA");
list.set(3,"DDD");
System.out.println(list.toString());
}
static void f6()
{
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
list.add("EEE");
List<String>s=list.subList(1, 3);
System.out.println(s.toString());
System.out.println(list.toString());
}
public static void main(String[] args) {
f6();
}
}
List其实跟数组差不多,有索引的存,存的东西可以是重复的,它的三个个实现类ArrayList LinkedList Vector的区别:
ArrayList底层是数组,查询比较快,
LinkedList底层是链表,增删比较快
Vector底层是数组
ArrayList与Vector的比较
Vector是线程安全的,效率低,ArrayLIst是线程不安全的,效率高,推荐使用ArrayList【Collections工具类中有相应的方法可以将ArrayList改为线程安全的】,LinkedList也是线性安全的。
注:
1.List<String> list=new ArrayList<>();//后面<>可以不写东西,但是前面<>必须写
2.
public class TestC {
public static void main(String[] args) {
LinkedList<String> link=new LinkedList<String>();
link.add("AAA");
link.add("BBB");
link.add("CCC");
System.out.println(link.peekFirst());//得到头部元素
System.out.println(link.toString());
System.out.println(link.pop());//弹出AAA并返回其值
System.out.println(link.toString());//[BBB, CCC]LinkedList是先进先出的
}
输出:
AAA
[AAA, BBB, CCC]
AAA
[BBB, CCC]
3.Stack用作资源池
public class TestD {
public static void main(String[] args) {
Stack<Integer> s=new Stack<>();//Stack是Vector的子类,底层是数组,它是线性安全的
s.add(1);
s.add(2);
s.add(3);
System.out.println(s.toString());
s.pop();//栈,后进先出(只有它特殊)
System.out.println(s.toString());
}
}
输出:
[1, 2, 3]
[1, 2]