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

JAVA-集合概述/List

2016-10-03 18:28 417 查看

JAVA-集合

谁若游戏人生,他就一事无成;谁不能主宰自己,便永远是一个奴隶。——歌德

集合框架



Vector迭代器

/*
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。

*/
class VectorDemo
{
public static void main(String[] args)
{
Vector v = new Vector();

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

Enumeration en = v.elements();

while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}
}


集合的上帝类 Collection

Collection定义了集合框架的共性功能。

Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。

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


1,添加
add(e);
addAll(collection);

2,删除
remove(e);
removeAll(collection);
clear();

3,判断。
contains(e);
isEmpty();

4,获取
iterator();
size();

5,获取交集。
retainAll();

6,集合变数组。
toArray();

1,add方法的参数类型是Object。以便于接收任意类型对象。

2,集合中存储的都是对象的引用(地址)


关于在List迭代器中删除和增加元素

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

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


public static void main(String[] args)
{

//演示列表迭代器。
ArrayList al = new ArrayList();

//添加元素
al.add("java01");
al.add("java02");
al.add("java03");

sop(al);

ListIterator li = al.listIterator();

//sop("hasPrevious():"+li.hasPrevious());

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

if(obj.equals("java02"))
//li.add("java009");
li.set("java006");

}

while(li.hasPrevious())
{
sop("pre::"+li.previous());
}
//sop("hasNext():"+li.hasNext());
//sop("hasPrevious():"+li.hasPrevious());

sop(al);

/*
//在迭代过程中,准备添加或者删除元素。

Iterator it = al.iterator();

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

if(obj.equals("java02"))
//al.add("java008");
it.remove();//将java02的引用从集合中删除了。

sop("obj="+obj);

}
sop(al);
*/

}


LinkedList

/*
LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了替代方法。

offerFirst();
offerLast();

peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

*/


class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList link = new LinkedList();

link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");

sop(link);
//      sop(link.getFirst());
//      sop(link.getFirst());
//sop(link.getLast());
//sop(link.removeFirst());
//sop(link.removeFirst());

//sop("size="+link.size());

while(!link.isEmpty())
{
sop(link.removeLast());
}

}

public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*

---
java01
java02
java03
java04

----
java04
java03
java02
java01
---
*/


用LinkedListTest来模拟堆栈

/*
使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。
队列:先进先出 First in First out  FIFO 如同一个水管。

*/

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());
}
}
}


ArrayList

import java.util.*;

/*
去除ArrayList集合中的重复元素。

*/

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("java01");
//      al.add("java03");

/*
在迭代时循环中next调用一次,就要hasNext判断一次。
Iterator it = al.iterator();

while(it.hasNext())
{
sop(it.next()+"...."+it.next());
}
*/

/**/
sop(al);

al = singleElement(al);

sop(al);

}

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;
}
}


需要特别注意的是,每次调用next()方法,都会将迭代器的指针向下移动一次

一个利用ArrayList的小Demo

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:
1,对人描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出。
List集合判断元素是否相同,依据是元素的equals方法。


class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}

public boolean equals(Object obj)
{

if(!(obj instanceof Person))
return false;

Person p = (Person)obj;
//System.out.println(this.name+"....."+p.name);

return this.name.equals(p.name) && this.age == p.age;
}
/**/
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ArrayListTest2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();

al.add(new Demo());

al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30);
//al.add(new Person("lisi02",32));
al.add(new Person("lisi02",32));
al.add(new Person("lisi04",35));
al.add(new Person("lisi03",33));
//al.add(new Person("lisi04",35));

//al = singleElement(al);

sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。

Iterator it = al.iterator();

while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName()+"::"+p.getAge());
}
}

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: