欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

集合知识点

程序员文章站 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]