集合框架(List)
来源:互联网 发布:我在百度云申请了域名 编辑:程序博客网 时间:2024/04/30 15:57
List接口:
List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
1,添加:
add(index,element) :在指定的索引位插入元素。
addAll(index,collection) :在指定的索引位插入一堆元素。
- al.add(1,"hello bug");
2,删除:
remove(index) :删除指定索引位的元素。 返回被删的元素。
- al.remove(2);
3,获取:
Object get(index) :通过索引获取指定元素。
- al.get(2);
int indexOf(obj) :获取指定元素第一次出现的索引位,如果该元素不存在返回-1;
- al.indexOf("hello bug")
所以,通过-1,可以判断一个元素是否存在。
int lastIndexOf(Object o) :反向索引指定元素的位置。
List subList(start,end) :获取子列表。
- al.subList(0, 2);//包含开头不包含结尾
4,修改:
Object set(index,element) :对指定索引位进行元素的修改。
- al.set(2,"hello victor");
5,获取所有元素:
for循环遍历获取获取:
- for (int i = 0; i < al.size(); i++) {
- System.out.println(al.get(i));
- }
ListIterator是List集合特有的迭代器。
ListIterator it = list.listIterator;//取代Iterator it = list.iterator;
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的方法操作元素,可是Interator的方法时有限的,只能对元素进行判断,去除,删除的操作。
如果想要其他操作,如:添加,修改等,就需要使用其子接口Listlterator
该接口只能通过List集合的listIterrator方法获取。
- ListIterator li = al.listIterator();
- while(li.hasNext())
- {
- Object obj = li.next();
- if(obj.equals("hello world"))
- {
- li.add("hello bug");
- }
- }
- System.out.println(al);
hasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
previous() 返回列表中的前一个元素。
- while(li.hasPrevious())
- {
- Object obj = li.previous();
- if(obj.equals("hello bug"))
- {
- li.set("hello 123");
- }
- }
- System.out.println(al);
List下分支:
ArrayList: 底层的数据结构,使用的是数组结构。 特点:查询速度快,但是增删稍慢,线程同步。
LinkedList: 底层使用的链表数据结构。特点:增删的速度很快,查询的速度慢
Vector: 底层是数组数据结构。被ArrayList所取代,线程同步。
Vector特有的取出方式:枚举。
枚举和迭代器很想,其实枚举和迭代器时一样的,因为枚举的名称以及方法的名称过长,所以渐渐被取代了。
LinkedList:
-addFirst() 将元素添加至集合开头
- LinkedList link = new LinkedList();
- link.addFirst("hello world");
- link.addFirst("hello java");
- link.addFirst("hello china");
- System.out.println(link);//[hello china, hello java, hello world]
-addLast() 将元素添加至集合末尾
- LinkedList link = new LinkedList();
- link.addLast("hello world");
- link.addLast("hello java");
- link.addLast("hello china");
- System.out.println(link);//[hello world, hello java, hello china]
-getFirst() 获取集合开头元素,但不移除元素
-getLast() 获取集合末尾元素,但不移除元素
- LinkedList link = new LinkedList();
- link.addLast("hello world");
- link.addLast("hello java");
- link.addLast("hello china");
- System.out.println(link.getFirst());//hello world
- System.out.println(link.getLast());//hello china
-removeFirst() 移除并返回集合开头元素。如果集合中没有元素,会出现异常。该方法为LinkedList特有方法,可以用来特殊遍历集合
- while(!link.isEmpty())
- {
- System.out.println(link.removeFirst());
- }
在JDK1.6以后出现了替代方法
如果集合中没有元素会返回NULL
getFirst()------>offerFirst()
getLast()------>offerLast()
getFirst()------>peekFirst()
getLast()------>peekLast()
LinkedList练习:
使用LinkedList模拟一个堆栈或者队列数据结果
堆栈:先进后出 如同一个杯子
- 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();
- }
- }
- public 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());
- }
- }
- }
队列:先进先出 如同一个水管
修改上述代码DuiLie类中的myGet方法为
- public Object myGet()
- {
- return link.removeLast();
- }
ArrayList练习:
去除ArrayList集合中的重复元素。
- public class ArrayListTest {
- 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");
- System.out.println(al);
- System.out.println(singleElement(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;
- }
- }
2.将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象,同姓名同年龄,视为同一个人,为重复元素。
- import java.util.*;
- class Person
- {
- private String name;
- private int age;
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- //覆盖父类Object中的equals方法
- public boolean equals(Object obj)
- {
- //判断obj是否为Person类
- if(!(obj instanceof Person))
- return false;
- Person p = (Person)obj;
- return this.name.equals(p.name)&&this.age == p.age;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- }
- public class ArrayListTest2 {
- public static void main(String[] args) {
- ArrayList al = new ArrayList();
- al.add(new Person("lisi01",30));
- al.add(new Person("lisi02",32));
- al.add(new Person("lisi02",32));
- al.add(new Person("lisi03",33));
- al.add(new Person("lisi04",35));
- al.add(new Person("lisi04",35));
- al = singleElement(al);
- Iterator it = al.iterator();
- while(it.hasNext())
- {
- Person p = (Person)it.next();
- System.out.println(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;
- }
- }
- 集合框架(List)
- 集合框架(List 、Set)
- 集合框架-List集合
- 集合框架-List集合-2
- 集合框架-List集合-3
- Java集合框架浅谈-List(一)
- Java集合框架浅谈-List(二)
- Java集合框架浅谈-List(三)
- java集合框架(List、Set、Map)
- 黑马程序员--集合框架(List,Set)
- java 集合框架二(list)
- API-集合框架(2)-List
- 集合框架之List
- JAVA集合框架-List
- 集合框架List部分
- 集合框架--List相关
- 集合框架之list
- 集合框架二:List
- wikioi-天梯-提高一等-高精度普及-3118:高精度练习之除法
- 树立个人品牌:让名企hr们主动来找你
- 通过Xcode将项目同步到GitHub上
- 文章为原创
- 内部类
- 集合框架(List)
- java基础加强--自定义泛型方法及其应用
- Android编程之DialogFragment源码详解(一)
- Java 反射机制
- Scrum敏捷开发简介
- 在 Linux 里设置环境变量的方法( export PATH )
- 在Mac OS X 上配置$JAVA_HOME环境变量
- SQL Server 分页查询
- CocoStudio教程二:基于Cocos2D-X创建跨平台项目