一.List接口是不唯一但是有序的,其常用的实现类有ArrayList(可见其采用了数组的存储方式,在内存中分配连续的空间,所以也称为动态数组,不同的是该集合中可以添加任何类型的数组,不同类的实例对象;并且添加的数据都将转换成Object类型,而数组中只能添加同一数据类型的数据)和LinkedList:
ArrayList类中有多重方法来操作数据,以下是比较常用的方法:
1.添加元素分为两种:一种是在列表的末尾添加元素,起始的位置从0开始:一种是在指定的位置添加元素,索引位置必须介于0和列表元素之间:
NewTitle car=new NewTitle(1,"汽车","wts");
NewTitle fun=new NewTitle(2,"娱乐","wt");
NewTitle sport=new NewTitle(3,"体育","w");
NewTitle ali =new NewTitle(4,"阿里","ali");
NewTitle baidu =new NewTitle(5,"百度","baidu");
List list=new LinkedList() ;
list.add(car);(从列表的末尾开始添加元素,起始小标为0)
list.add(1,fun);(从指定小标为1的地方添加元素)
2.返回列表元素的个数:
System.out.println(list.size());(int size();个数是多少,和数组的长度类似)
3.返回指定索引位置的元素,
但是因为取出的元素时Object类型,(因为在添加数组时把这些数据的类型都转换成Object类型的,任何一种数据类型或者对象放进容器中后都会失去原有的类型,变成 Object,用的时候从容器中取出后进行转型成所需的类型就可以了,《Think in java》 中是这样解释的: 由于当初编写集合时,那个集合的程序员根本不知道用户到底想把什么类型置入集合。若指示某个集合只允许特定的类型,会妨碍它成为一个“常规用途”的工具,为用户带来麻烦。为解决这个问题,集合实际容纳的是类型为Object的一些对象的句柄),所以要进行强制类型转化;
for (int i = 0; i < list.size(); i++) {
NewTitle title=(NewTitle)list.get(i);(进行类型的转换,要记放到集合里面的元素都为Object类型!)
System.out.println(title.getIndex()+"\t"+title.getTitle()+"\t"+title.getAuthor());
}
所以咋强制for循环中,格式如下:
for (Object obj:list )
{
NewTitle a=(NewTitle)obj;
System.out.println(a.getIndex()+"\t"+a.getTitle()+"\t"+a.getAuthor());
}
4.将索引位置的元素进行替换:
list.set(1,baidu);
5.判断列表中是否存在指定元素
System.out.println(list.contains(car));
6.返回元素在集合中出现的索引位置
System.out.println(list.indexOf(sport));
7.从列表中删除某个元素,和增加相对应,有二种方法;一种是直接删除元素,一种是删除下标
list.remove(sport);
list.remove(1);
二.LinkedList除了包含ArrayList类所包含的方法外,还提供了一下可以在首部或者尾部进行插入。删除的方法:
1.将指定元素插到当前集合的首部或者尾部:注意:(如果是List list=new LinkedList() ;在这里要进行类型转化,不然无法使用LinkedList自己特有方法,和之前学习的知识一样;)
LinkedList list1=(LinkedList)list;
list1.addFirst(sport);
list1.addLast(baidu);
2.获得当前集合的第一个或者最后一个元素(或者是对象):
NewTitle first=(NewTitle)list1.getFirst();(因为是Object getFirst(),所以要进行类型转换;)
System.out.println(first.getIndex()+"\t"+first.getTitle()+first.getAuthor());
3.移除并返回当前集合的第一个元素或者最后一个元素
NewTitle remove=(NewTitle)list1.removeFirst();
System.out.println(remove.getTitle()+remove.getAuthor());