您的位置:首页 > 编程语言 > Java开发

java_Collection_List

2015-10-10 20:24 323 查看
Collection

层次结构中的根接口,Collection 表示一组对象,这些对象也称为 collection 的元素。

它提供更具体的子接口(如 Set 和 List)实现,本文主要介绍List

|--List:元素的有序的,元素可以重复。因为该集合体系有索引

|--ArrayList:底层的数据结构使用的是数组结构,特点:查询速度快,增删稍慢,线程不同步

|--LinkedList:底层的数据结构使用的是链表,特点:增删速度快。查询稍慢

|--Vector

|--Set: 元素是无序的,元素不可以重复。

List

特有方法。凡是可以操作角标的方法都是该体系特有的方法



add(index,element);//在列表的指定位置插入指定元素

addAll(index,Collection);



remove(index)



set(index,element);



get(index);

subList(from,to);

ListIterator();//返回此列表元素的列表迭代器

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。

因为会发生ConcurrentModificationException异常。

所以在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的

只能对元素进行判断、取出、删除的操作

如果想做其他的操作,如添加、修改等,要使用他的子接口,ListIterator。

该接口只能通过List集合的ListIterator方法获取。

代码演示:

import java.util.*;
class ListDemo
{
public static void method()
{
ArrayList al = new ArrayList();

al.add("java01");
al.add("java02");
al.add("java03");

sop("原集合"+al);
al.add(1,"java09");
sop(al);
//删除指定位置的元素
//al.remove(2);
//通过角标获取元素
sop("get(1):"+al.get(1));

sop(al);

for(int x=0; x<al.size(); x++)
{
sop("al("+x+")="+al.get(x));
}
for(Iterator it = al.iterator(); it.hasNext();)
{
sop(it.next());
}

//通过indexof获取对象的位置
sop("Index="+al.indexOf("java02"));

List sub = al.subList(1,3);
sop("sub="+sub);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();

al.add("java01");
al.add("java02");
al.add("java03");

ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java02"))
//li.add("java07");
li.set("java008");
}
while(li.hasPrevious())
{
sop("pre::"+li.previous());
}
sop("hasNext():"+li.hasNext());//后面有没有元素
sop("hasPrevious():"+li.hasPrevious());//前面有没有元素

sop(al);

/*
for(Iterator it = al.iterator(); it.hasNext();)
{
Object obj = it.next();

//注意!!!!!
if(obj.equals("java02"))//一个是集合操作al,一个是迭代器操作obj
//al.add("java07");//会出错报异常ConcurrentModificationException异常。
it.remove();
sop(it.next());
}
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}


ArrayList

1 练习去除ArrayList中的重复元素认识ArrayList

代码演示

import java.util.*;
class ArrayListTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();

al.add("java01");
al.add("java02");
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");

sop(al);

al = singleElement(al);

sop(al);
System.out.println("Hello World!");
}
public static ArrayList singleElement(ArrayList al)
{
ArrayList newAl = new ArrayList();

Iterator it = al.iterator();

while(it.hasNext())
{
Object obj = it.next();

if(!newAl.contains(obj))
newAl.add(obj);

}
return newAl;
}
}


2将自定义对象作元素为元素存到ArrayList集合中,并去除重复

比如村人对象,同姓名同年龄,视为同一个人,为重复元素

思路:

1 对人描述,将数据封装进人对象

2 定义容器,将人存入

3 取出

代码演示:

import java.util.*;
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public boolean equals(Object obj)//equals()是自动调用的
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;

return this.name.equals(p.name) && this.age == p.age;
}
}

class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("lisi01",31));//al.add(Object obj);//Object obj = new Person("Lisi01",30)//向上转型返回的是object
al.add(new Person("lisi02",32));
al.add(new Person("lisi02",32));
al.add(new Person("lisi03",33));
al.add(new Person("lisi04",34));
al.add(new Person("lisi04",34));

al = singleElement(al);

Iterator it = al.iterator();
while(it.hasNext())
{
//Object obj = it.iterator();
//Person p = (Person)obj;//注意强制转换
Person p = (Person)it.next();
//sop(it.next().getName()+"::"+it.next.getAge());
sop(p.getName()+"::"+p.getAge());
}
System.out.println("Hello World!");
}
public static void sop(Object obj)
{
System.out.println(obj);
}

public static ArrayList singleElement(ArrayList al)
{
ArrayList newAl = new ArrayList();

Iterator it = al.iterator();

while(it.hasNext())
{
Object obj = it.next();

if(!newAl.contains(obj))
newAl.add(obj);

}
return newAl;
}
}


LinkedList

练习模拟模拟一个堆栈或者队列数据结构

堆栈:先进后出

队列:先进先出

import java.util.*;
class DuiLie
{
private LinkedList link;

DuiLie()
{
link = new LinkedList();
}

public void myAdd(Object obj)
{
link.addFirst(obj);
}
public Object myGet()
{
return link.removeFirst();
}
public boolean isNull()
{
return link.isEmpty();
}

}
class  LinkedListTest
{
public static void main(String[] args)
{
DuiLie dl = new DuiLie();
dl.myAdd("java01");
dl.myAdd("java02");
dl.myAdd("java03");
dl.myAdd("java04");
while(!dl.isNull())
{
System.out.println(dl.myGet());
}
System.out.println("Hello World!");
}
}
总结:代码难度不大,但是也要达到熟练,掌握每个知识点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: