JAVA学习-Collections类
目录
- List 列表
- Set 集合
- Queue 队列
- 待更新
List 列表
List是一个继承了Collectiions的接口 ,这个接口的用户可以精确地控制每个元素被插入在列表中的位置,用户可以通过index找到数组中的元素。List允许有相同的元素 ,列表通常允许对e1和e2元素进行配对,比如e1.equals(e2),如果它们允许零元素,它们通常允许多个空元素。有人可能希望实现一个禁止重复的列表,在用户试图插入时抛出运行时异常,这是不可想象的,但是我们希望这种用法是非常少见的。(我觉得这样会花费大量的时间来维护这个列表,如果想没有重复的元素,可以用下面的Set) —— [ 官方文档]
在这里我就经常用到的ArrayList(数组列表)和LinkedList(链表)进行演示说明
ArrayList(数组列表)
在实例化时用:List<> = ArrayList<>();
尖括号中可是是任何类(如String等),如果要用基本数据类型,要填写基本数据类型的封装类,八种基本数据类型和其对应的封装类如下表:
基本数据类型 | 封装类 |
---|---|
int | Integer |
short | Short |
float | Float |
double | Double |
long | Long |
boolean | Boolean |
byte | Byte |
char | Character |
代码示例
import java.util.ArrayList;
import java.util.List;
public class ArrayListDisplay {
public static void main(String[] args)
{
List<String> list = new ArrayList<>();
list.add("name1"); //像数组一样list可以加入,只有一个参数的时候在数组的最开始加入
list.add(1, "name2"); //在list的index为1处加入,最多只能在这个数组大小的后一个,否则会报错
list.add("name3");
list.add(0,"namenew"); //在已有的地方加入会将这个地方原来的元素和后边的元素都向后推
System.out.println("第一次");
for(int i =0;i<list.size();i++)
{
System.out.print(list.get(i)+" "); //遍历数组
}
list.remove(0); //可以通过位置来删除元素
System.out.println("第二次");
for(int i =0;i<list.size();i++)
{
System.out.print(list.get(i)+" "); //遍历数组
}
list.remove("name1"); //可以通过元素和数组中的元素进行对比,找到后删除
System.out.println("第三次");
for(int i =0;i<list.size();i++)
{
System.out.print(list.get(i)+" "); //遍历数组
}
System.out.println(list.isEmpty()); //如果是空的返回true,否则返回false
list.set(0, "namechange");
System.out.println("第四次");
for(int i =0;i<list.size();i++)
{
System.out.print(list.get(i)+" "); //遍历数组
}
System.out.println();
String[] a = new String[list.size()]; //建立一个和list大小相同的同类型数组
String[] array = list.toArray(a); //用a来承接这个数组,并返回a
for(int i = 0;i<array.length;i++)
{
System.out.print(array[i]+" ");
}
}
}
LinkedList(链表)
如果不使用LinkedList的特有方法,用List<>() list= new LinkedList<>();实例化
如果要使用它的特有方法使用LinkedList<>() list = new LinkedList<>();实例化
示例代码
import java.util.LinkedList;
public class LinkedListDisplay {
public static void main(String[] args) {
LinkedList<Integer> list= new LinkedList<>(); //用LinkedList来承接新建的LinkedList类可以使用这个类独有的方法
list.add(1);
list.add(2);
list.add(3);
for(Integer i :list)
{
System.out.print(i+" ");
}
System.out.println();
list.addFirst(0); //这个方法会在链表的最开始处插入元素
for(Integer i :list)
{
System.out.print(i+" ");
}
System.out.println();
list.addLast(4);//这个方法会在链表的最末端处插入元素
for(Integer i :list)
{
System.out.print(i+" ");
}
System.out.println();
System.out.println(list.getFirst()); //得到链表的第一个元素
System.out.println(list.getLast()); //得到链表最后一个元素
System.out.println(list.contains(1)); //这个链表是否包含元素1,如果是,返回true,否则返回false
list.push(5); //向链表中push一个元素,push到最前的我位置
for(Integer i :list)
{
System.out.print(i+" ");
}
System.out.println();
int a = list.pop(); //pop(弹出)这个链表的第一个元素
System.out.println("弹出的元素:"+a);
for(Integer i :list)
{
System.out.print(i+" ");
}
}
}
Set集合
一个不包含重复元素的集合。更正式地说,set不包含e1和e2元素,比如e1=(e2),最多只有一个空元素。正如其名称所暗示的,这个接口模拟了数学集的抽象。Set接口附加了额外的规定,超出了从收集接口继承的条款,在所有构造函数的契约上,以及add、equals和hashCode方法的契约上。为了方便起见,还在这里列出了其他继承方法的声明。(伴随这些声明的规范已经被定制到Set接口中,但是它们不包含任何额外的规定。)对于构造函数的附加规定,毫不奇怪,所有的构造函数必须创建一个不包含重复元素(如上所述)的集合。 —— [ 官方文档]
在实例化时使用Set<> set = new HashSet<>();
示例代码
“`
package set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDisplay {
public static void main(String[] args )
{
Set set = new HashSet<>();
set.add(“Trump”);
set.add(“Trump”);
Iterator it = set.iterator();
while(it.hasNext())
{
String s = it.next();
System.out.println(s);
}
}
}
“`