1.集合体系
集合是用来存储和管理其他对象的对象,即对象的容器。集合可以扩容,长度可变,可以存储多种类型的数据而数组长度不可变,只能存储单一类型的元素。
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。(如图)
从上图可以发现:
集合接口:6个接口,表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类,对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类,对接口的具体实现。
其中我们可以根据图可以看出集合框架可以分为两个部分,一个是Collection集合体系部分,一个是Map体系部分。
2.Collection接口
用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。
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);
}
}
addFirst();
addLast();
2.获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
getFirst();
getLast();
3.删除元素
removeFirst();
removeLast();
注意:在JDK1.6出现了替代方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
pollFirst();
pollLast();
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培训 、期待与您交流! ---------------