List接口继承collection接口,此接口可以对列表中的每个元素精确的控制,可以根据元素的索引来获取列表中的值,下面介绍常用的几种,ArrayList,LinkedList。
ArrayList集合
ArrayList是一个动态修改的数组,它没有固定的大小,不需要自己分配空间,java本身已经初始化容量为10的大小,可以直接添加删除等一系列操作。
ArrayList构造方法:
- ArrayList() ;构造一个初始化容量为10的空列表。
- ArrayList(Collection c) ; 构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
- ArrayList(int initialCapacity) ;构造一个指定初始容量的空列表。
常用方法:
方法名 | 说明 |
---|
boolean add(E e) | 将指定元素添加到列表尾部 | void add(int index, E element) | 将指定元素添加到列表中指定位置 | void clear() | 删除此列表中的所有元素 | Object clone() | 返回ArrayList副本 | boolean contains(Object o) | 如果列表中包含指定元素则返回true,否则false | E get(int index) | 返回列表中指定索引位置上的元素 | int indexOf(Object o) | 返回列表中首次出现的指定元素的索引,如果没有则返回-1 | int lastIndexOf(Object o) | 返回此列表中最后一次出现的指定元素的索引,没有则返回-1 | E remove(int index) | 删除指定索引上的元素,并返回删除值 | boolean remove(Object o) | 移除列表中首次出现的元素 | E set(int index, E element) | 将此列表中的索引位置的元素换成指定的元素 | int size() | 返回此列表中的元素个数 | Object[] toArray() | 将此列表所有元素换成数组 | boolean isEmpty() | 如果此列表为空则返回true | List subList(int fromlndex, int tolndex) | 将此列表中从fromindex到toindex的元素组成新的集合返回 |
示例
import java.util.ArrayList;
public class dome2{
public static void main(String[] args){
ArrayList list=new ArrayList();
list.add("nihoa");
list.add(12);
list.add('a');
list.add("hello");
list.set(1,"java");
System.out.println("索引为2的值是:"+list.get(2));
System.out.println("删除索引为0的值是:"+list.remove(0));
System.out.println("列表中还有"+list.size()+"个元素");
System.out.println("判断列表是不是为空: "+list.isEmpty());
for (Object object : list) {
System.out.print(object+" ");
}
}
}
结果 索引为2的值是:a 删除索引为0的值是:nihoa 列表中还有3个元素 判断列表是不是为空: false java a hello
例1:
- 创建一个商品类,指定商品的编号,名称,价格,封装它们。
class Goods{
private int id;
private String name;
private float price;
public Goods() {
}
public Goods(int id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Override
public String toString() {
return "商品编号: "+id+", 名称: "+", 价格: "+",";
}
}
- 创建一个测试类,填写商品的价格,编号,名称并保存到列表中,通过ArrayList类的方法修改和获取值。
import java.util.ArrayList;
public class dome2{
public static void main(String[] args){
ArrayList<Goods> list=new ArrayList<Goods>();
list.add(new Goods(1,"保温杯",22.0f));
list.add(new Goods(2,"洗发水",21.3f));
list.add(new Goods(3,"笔记本",5.0f));
Goods g=new Goods(5,"热水壶",59.0f);
list.add(g);
list.add(new Goods(4,"菜刀",31.4f));
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).toString());
}
System.out.println("查找编号为3,名称为热水壶,价格为59元的元素索引"+list.indexOf(g));
System.out.println("热水壶的价格是 "+list.get(3).getPrice()+" 元");
System.out.println("洗发水的编号是 "+list.get(1).getId());
System.out.println("将菜刀的价格设为120元 ");
list.get(list.size()-1).setPrice(120.0f);
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).toString());
}
}
}
结果 商品编号: 1 名称: 保温杯 价格: 22.0 商品编号: 2 名称: 洗发水 价格: 21.3 商品编号: 3 名称: 笔记本 价格: 5.0 商品编号: 5 名称: 热水壶 价格: 59.0 商品编号: 4 名称: 菜刀 价格: 31.4 查找编号为3,名称为热水壶,价格为59元的元素索引3 热水壶的价格是 59.0 元 洗发水的编号是 2 将菜刀的价格设为120元 商品编号: 1 名称: 保温杯 价格: 22.0 商品编号: 2 名称: 洗发水 价格: 21.3 商品编号: 3 名称: 笔记本 价格: 5.0 商品编号: 5 名称: 热水壶 价格: 59.0 商品编号: 4 名称: 菜刀 价格: 120.0
Iterator迭代器遍历: Iterator接口是Collection接口的超级接口,通过Collection接口下的iterator方法返回iterator。
Iterator方法:
方法名 | 说明 |
---|
boolean hasNext() | 如果有元素仍可以迭代,就返回true | E next() | 返回迭代的下一个元素 | void remove() | 移除迭代器返回的最后一个元素 |
public class dome2{
public static void main(String[] args){
ArrayList list=new ArrayList();
list.add("hello ");
list.add("world!,");
list.add("hello ");
list.add("java!");
Iterator it=list.iterator();
while(it.hasNext()) {
System.out.print(it.next());
}
}
}
LinkedList类
- LinkedList类采用链表结构保存对象,链表采用节点之间的指向,上一个节点指向下一个节点,并且可以在中间插入,不需要数组还需要重新排列,所以在频繁的插入元素和删除元素这方面,LinkedList类要比ArrayList类要快,效率更高。但在访问元素速度方面却相对落后。
构造方法
- LinkedList() ;构造一个空列表
- LinkedList(Collection c) ;构造一个包含指定 collection 中的元素的列表
常用方法:
方法名 | 说明 |
---|
boolean add(E e) | 将指定元素添加到元素列表的结尾 | void add(int index, E element) | 在列表中指定的位置插入指定的元素 | void addFirst(E e) | 将指定元素插入到此列表的开头 | void addLast(E e) | 将指定的元素添加到此列表的结尾 | boolean contains(Object o) | 如果列表中有指定元素返回true,否则false | E element() | 获取但不移除此列表的第一个元素 | E get(int index) | 返回此列表中指定的元素 | E getFirst() | 返回此列表的第一个元素 | E getLast() | 返回此列表的最后一个元素 | int indexOf(Object o) | 返回此列表首次出现的指定元素的索引,没有返回-1 | int lastIndexOf(Object o) | 返回此列表最后出现的指定元素的索引,没有返回-1 | E set(int index, E element) | 将列表中指定位置的元素替换 | E removeFirst() | 移除并返回此列表中的第一个元素 | E removeLast() | 移除并返回此列表的最后一个元素 |
示例:
public class dome2{
public static void main(String[] args){
LinkedList list=new LinkedList();
list.add("电风扇");
list.add("吹风机");
list.add("香皂");
list.add("肥皂");
list.add("洗发水");
System.out.println("获取的第一个商品是: "+list.getFirst());
System.out.println("获取的最后一个商品是: "+list.getLast());
System.out.println("删除的第一个元素是: "+list.removeFirst());
System.out.println("将索引为3的元素修改成: "+list.set(3,"牛角梳"));
for(int i=0;i<list.size();i++) {
System.out.print(list.get(i)+"\t");
}
}
}
LinkedList与ArrayList的区别:
- ArrayList类是基于数组结构实现的,访问速度优先于LinkedList类。
- LinkedList类占用的内存空间比较大,但在批量插入,删除,修改等时优先于ArrayList类。
|