Java(List接口的集合使用详解)

这篇文章主要介绍了Java集合操作之List接口及其实现方法,详细分析了Java集合操作中List接口原理、功能、用法及操作注意事项,需要的朋友可以参考下

Java,List接口的集合使用详解,久久派带你了解更多相关信息。

目录
  • ArrayList集合
  • LinkedList类
  • LinkedList与ArrayList的区别:
  • 总结

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\"); //将索引为1的换成字符串          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));                    //1.遍历所有商品          for(int i=0;i<list.size();i++) {        	  System.out.println(list.get(i).toString());          }          //2.获取指定商品的信息          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);                  //3.遍历所有商品          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的区别:

1.ArrayList类是基于数组结构实现的,访问速度优先于LinkedList类。

2.LinkedList类占用的内存空间比较大,但在批量插入,删除,修改等时优先于ArrayList类。

总结

本片文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注趣讯吧的更多内容!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/18621.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注