好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java List接口的集合使用详解

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的元素组成新的集合返回

示例

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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:

创建一个商品类,指定商品的编号,名称,价格,封装它们。

 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

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类的方法修改和获取值。

 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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() 移除迭代器返回的最后一个元素

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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() 移除并返回此列表的最后一个元素

示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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类。

总结

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

原文链接:https://blog.csdn.net/m0_46813809/article/details/119924290

查看更多关于Java List接口的集合使用详解的详细内容...

  阅读:12次