您的位置:首页 > 职场人生

黑马程序员----JAVASE之集合操作【上】

2013-11-17 20:24 239 查看







-------------- android培训java培训、期待与您交流!
---------------

1.集合体系

集合是用来存储和管理其他对象的对象,即对象的容器。集合可以扩容,长度可变,可以存储多种类型的数据而数组长度不可变,只能存储单一类型的元素。

Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。(如图)

从上图可以发现:

集合接口:6个接口,表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类,对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类,对接口的具体实现。

其中我们可以根据图可以看出集合框架可以分为两个部分,一个是Collection集合体系部分,一个是Map体系部分。

2.Collection接口

<
4000
span style="color:rgb(73,73,73);font-family:simsun;line-height:21px;">用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。

Collection体系:

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

3.List接口

* ArrayList


在实际开发中比较常用的,底层使用的是数组的数据结构,所有在查询速度上比较快,但是增删稍慢,在实际开发中如果

我们对数据的查询的时候我们可以选择这中List进行存储数据。

* List接口的特有方法。


add(index,element);
addAll(index,Collection);


remove(index);


set(index,element);


get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();

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

ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
sop(al);
ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();

if(obj.equals("java02"))
li.set("java006");
}
while(li.hasPrevious())
{
sop("pre::"+li.previous());
}
一下为常见案例

1.去除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("java01");
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;
}
}

其实我们在去除List集合的重复元素的的时候我们可以利用Set集合的构造方法去除即:

Set set = new HashSet(list);

然后在List list = new ArrayList(set);就OK了。

其实在去除重复元素的内部原理就是利用了equals方法。如果我们在一个去除重复元素时我们可以重写一下equals就OK了。

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;
}
//contains原理为调用equals,这里实现equals的覆盖,比较对象中姓名及年龄是否全一样
public boolean equals(Object obj)
{
if (!obj instanceof Person)
return false;
Person e = (Person)obj; //向下转型
return this.name.equals(e.name) && this.age==e.age;
}
}
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("zhangsan",12));
al.add(new Person("lisi",13));
al.add(new Person("wangwu",12));
al.add(new Person("xiaomei",14));
al.add(new Person("lisi",13));
al = singleElements(al);
for (Iterator it = al.iterator(); it.hasNext(); )
{
Person p = (Person)it.next(); //向下转型
sop(p.getName()+"~~"+p.getAge());
}

}
//去除重复方法
public static ArrayList singleElements(ArrayList al)
{
ArrayList newal = new ArrayList();
for (Iterator it = al.iterator(); it.hasNext(); )
{
Person p = (Person)it.next();
if (!newal.contains(p))
newal.add(p);
}
return newal;
}

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


* LinkList
底层使用的链表数据结构,所有增删速度很快,但查询稍慢。在实际开发中如果项目中涉及到比较多对数据的增删等操作时,我们可以优先考虑使用LinkList。
LinkedList特有方法:
1.增加元素:
addFirst();
addLast();

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

3.删除元素
removeFirst();
removeLast();
注意:在JDK1.6出现了替代方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
pollFirst();
pollLast();

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

-------------- android培训java培训、期待与您交流!
---------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  博客 黑马程序员