java.集合(Ⅱ).List
2016-05-15 19:40
417 查看
1.List
意义:实现了Collection的子接口之一
特点:元素是有序的,是可重复的,因为该集合体系有索引。
常见三子类
|——ArrayList:底层用的数据结构用的是数组结构。
特点:查询速度很快,但增删稍慢,线程不同步,长度可变—默认长度为10,当超过已有长度时,自动生成延长百分之50数组,并自动转移数据。
|——LinkedList:底层使用的是链表数据结构。
特点:增删速度很快,查询速度慢
|——Vector:1.2版本前使用,和ArrayList功能一致。
特点:线程同步。操作速度很慢,一般不用。枚举是Vector的特有取出方法
因为枚举和迭代是一样的。且枚举的名称以及方法名称都过长。所以在1.5版本后被迭代器取代了。
List基本方法
![](http://img.blog.csdn.net/20160515192631267)
![](http://img.blog.csdn.net/20160515192642933)
List特有方法
![](http://img.blog.csdn.net/20160515192702580)
几个知识点:
⑴当按角标进行添加方法时,操作相当于插入。相应角标的元素将后移。
⑵角标是从0开始的
⑶List类有特有的输出所有元素的方法,即用f.size()与f.get()进行遍历
2.ListIterator
意义:List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以在 通过集合对象的方法操作集合中的元素 的同时,又通过迭代器对元素进行操作。
因为会发生并发修改异常。
所以在操作中,只能通过一种途径的方法操作元素。而迭代器的方法只有
判断、取出、删除三种,即
![](http://img.blog.csdn.net/20160515193429637)
因为其方法过少不能满足很多需求,所以List中就有了其子接口。ListIterator。其方法有:
![](http://img.blog.csdn.net/20160515193500481)
该接口只能通过List集合的listIterator方法获取。
3.LinkedList
特有方法:
![](http://img.blog.csdn.net/20160515193557748)
![](http://img.blog.csdn.net/20160515193608108)
ex:
输出:
![](http://img.blog.csdn.net/20160515193716984)
List的两个小练习:
去掉ArrayList中的重复元素
——————————————————
在ArrayList中输入学生信息,并排除重复的数据
一个知识点:
List中,contains和remove进行的比较,底层都是调用Object类中默认的equals方法,而当默认方法不能满足时,可以以覆盖equals方法的形式进行修改,就像第二个小练习中这样
意义:实现了Collection的子接口之一
特点:元素是有序的,是可重复的,因为该集合体系有索引。
常见三子类
|——ArrayList:底层用的数据结构用的是数组结构。
特点:查询速度很快,但增删稍慢,线程不同步,长度可变—默认长度为10,当超过已有长度时,自动生成延长百分之50数组,并自动转移数据。
|——LinkedList:底层使用的是链表数据结构。
特点:增删速度很快,查询速度慢
|——Vector:1.2版本前使用,和ArrayList功能一致。
特点:线程同步。操作速度很慢,一般不用。枚举是Vector的特有取出方法
因为枚举和迭代是一样的。且枚举的名称以及方法名称都过长。所以在1.5版本后被迭代器取代了。
List基本方法
List特有方法
几个知识点:
⑴当按角标进行添加方法时,操作相当于插入。相应角标的元素将后移。
⑵角标是从0开始的
⑶List类有特有的输出所有元素的方法,即用f.size()与f.get()进行遍历
for(int i=0;i<f.size();i++) write(f.get(i));//write是一个自定义静态输出方法,就不另外加进来了
2.ListIterator
意义:List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以在 通过集合对象的方法操作集合中的元素 的同时,又通过迭代器对元素进行操作。
因为会发生并发修改异常。
所以在操作中,只能通过一种途径的方法操作元素。而迭代器的方法只有
判断、取出、删除三种,即
因为其方法过少不能满足很多需求,所以List中就有了其子接口。ListIterator。其方法有:
该接口只能通过List集合的listIterator方法获取。
3.LinkedList
特有方法:
ex:
import java.util.LinkedList; public class ListDemo { public static void main(String[] args) { LinkedList f = new LinkedList(); f.offerFirst("java 01"); f.offerFirst("java 02"); f.offerFirst("java 03"); write(f); } public static void write(Object obj) { System.out.println(obj); } }
输出:
List的两个小练习:
去掉ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; public class ListDemo { public static void main(String[] args) { ArrayList f = new ArrayList(); f.add("java 01"); f.add("java 02"); f.add("java 02"); f.add("java 01"); f.add("java 03"); f.add("java 01"); write(f); write("_________"); write(single(f)); } public static ArrayList single(ArrayList f) { ArrayList f1 = new ArrayList(); for(Iterator it=f.iterator();it.hasNext();) { Object obj = it.next(); if(!f1.contains(obj)) { f1.add(obj); } } return f1; } public static void write(Object obj) { System.out.println(obj); } }
——————————————————
在ArrayList中输入学生信息,并排除重复的数据
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; class Person { private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj)//contains用来判断对象是否相同,但它的底层自动调用的是默认方法equals, //但当默认equals不能满足需求时,需要进行方法覆盖 { Person p = (Person)obj; return this.name.equals(p.name)&&this.age==p.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class ListDemo { public static void main(String[] args) { ArrayList f = new ArrayList(); f.add(new Person("java 01",1)); f.add(new Person("java 02",2)); f.add(new Person("java 02",1)); f.add(new Person("java 03",1)); f.add(new Person("java 04",1)); f.add(new Person("java 01",1)); Iterator it = single(f).iterator(); while(it.hasNext()) { Person p =(Person)it.next(); write(p.getName()+"....."+p.getAge()); } } public static ArrayList single(ArrayList f) { ArrayList f1 = new ArrayList(); for(Iterator it=f.iterator();it.hasNext();) { Object obj = it.next(); if(!f1.contains(obj))//底层原理是equals { f1.add(obj); } } return f1; } public static void write(Object obj) { System.out.println(obj); } }
一个知识点:
List中,contains和remove进行的比较,底层都是调用Object类中默认的equals方法,而当默认方法不能满足时,可以以覆盖equals方法的形式进行修改,就像第二个小练习中这样
相关文章推荐
- 基于Spring MVC的Web应用开发(7) - Headers
- Java之多线程异步和同步
- Spring 关键点
- Spring MVC学习笔记——POJO
- Mac Eclipse svn插件地址
- Windows下,Eclipse的Android NDK(r9) 配置
- Eclipse常用设置
- Java字符串处理
- Java ConcurrentModificationException异常原因和解决方法
- 在eclipse中android NDK开发环境的搭建
- Java核心之I/O;
- java获取当前路径的几种方法
- java.集合(Ⅰ).集合的基本方法与Iterator迭代器
- RxJava之组合操作符
- Java 静态变量,静态函数,静态代码块,构造代码块
- JavaIO系统
- Java字节码操纵框架ASM快速入门
- javaweb防止当前表单重复提交数据
- JAVA开发工程师有前途吗?
- java数组存放问题