Java list的用法排序及遍历

概要:

List中可以添加任何对象,包括自己定义的新的类。

List的常用实现类有:ArrayList和LinkedList。

1用法

ArrayList

Java | 复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public  static  void  main(String[] args) {
     // ArrayList类实现一个可增长的动态数组
     List<String> list =  new  ArrayList<String>();
     // 插入元素
     list.add( "list1" );
     list.add( "list2" );
     // 打印list的大小
     System.out.println(list.size());
     // 按索引移除元素
     list.remove( 0 );
     // 按对象移除元素
     list.remove( "list2" );
     // 打印list的大小
     System.out.println(list.size());
     // 清空list
     list.clear();
}

LinkedList

Java | 复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public  static  void  main(String[] args) {
     // LinkedList类实现了链表,可初始化化为空或者已存在的集合
     LinkedList<String> list =  new  LinkedList<String>();
     // 插入元素
     list.add( "list2" );
     list.add( "list3" );
     // 向链表头插入数据
     list.addFirst( "list1" );
     // 向链表尾插入数据
     list.addLast( "list4" );
     for  (String str : list) {
         System.out.println(str);
     }
     // 获取链表头数据
     System.out.println( "链表头数据:"  + list.getFirst());
     // 获取链表尾数据
     System.out.println( "链表尾数据:"  + list.getLast());
}

2排序

数字排序

Java | 复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  static  void  main(String[] args) {
     // 创建list
     List<Integer> list =  new  ArrayList<Integer>();
     // 插入元素
     list.add( 2 );
     list.add( 0 );
     list.add( 3 );
     list.add( 4 );
     list.add( 1 );
     Collections.sort(list);
     for  ( int  i : list) {
         System.out.println(i);
     }
}

中文排序

Java | 复制
1
2
3
4
5
6
7
8
9
10
11
12
13
public  static  void  main(String[] args) {
     ArrayList<String> list =  new  ArrayList<String>();
     list.add( "一鸣惊人-Y" );
     list.add( "人山人海-R" );
     list.add( "海阔天空-H" );
     list.add( "空前绝后-K" );
     list.add( "后来居上-H" );
     Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
     Collections.sort(list, cmp);
     for  (String str : list) {
         System.out.println(str);
     }
}

实体类排序

Java | 复制
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package  net.xsoftlab.baike;
import  java.util.ArrayList;
import  java.util.Collections;
import  java.util.Comparator;
import  java.util.List;
public  class  TextList {
     public  static  void  main(String[] args) {
         List<User> userlist =  new  ArrayList<User>();
         userlist.add( new  User( "Y - 易小星 " 33 ));
         userlist.add( new  User( "W - 王大锤" 33 ));
         Comparator<User> cmp =  new  ComparatorUser();
         Collections.sort(userlist, cmp);
         for  (User user : userlist) {
             System.out.println(user.getName());
         }
     }
}
class  ComparatorUser  implements  Comparator<User> {
     @Override
     public  int  compare(User u1, User u2) {
         // 先按年龄排序
         int  flag = u1.getAge().compareTo(u2.getAge());
         // 年龄相等比较姓名
         if  (flag ==  0 ) {
             return  u1.getName().compareTo(u2.getName());
         else  {
             return  flag;
         }
     }
}
class  User {
     private  String name;
     private  Integer age;
     public  User() {
         super ();
     }
     public  User(String name, Integer age) {
         super ();
         this .name = name;
         this .age = age;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     public  Integer getAge() {
         return  age;
     }
     public  void  setAge(Integer age) {
         this .age = age;
     }
}

3遍历

三种遍历方法

Java | 复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  static  void  main(String[] args) {
     List<String> list =  new  ArrayList<String>();
     // 插入元素
     list.add( "list1" );
     list.add( "list2" );
     list.add( "list3" );
     System.out.println( "第一种遍历方法 - >" );
     for  (String str : list) {
         System.out.println(str);
     }
     System.out.println( "第二种遍历方法 - >" );
     for  ( int  i =  0 ; i < list.size(); i++) {
         System.out.println(list.get(i));
     }
     System.out.println( "第三种遍历方法 - >" );
     Iterator<String> iter = list.iterator();
     while  (iter.hasNext()) {
         System.out.println(iter.next());
     }
}

遍历时移除元素

Java | 复制
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package  net.xsoftlab.baike;
import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.List;
public  class  RemoveItemFromList {
     public  static  void  main(String[] args) {
         List<String> list =  new  ArrayList<String>();
         // 插入元素
         list.add( "list1" );
         list.add( "list2" );
         list.add( "list2" );
         list.add( "list3" );
         // 实例化新的list防止因传递地址而达不到测试效果。
         remove1( new  ArrayList<String>(list));
         remove2( new  ArrayList<String>(list));
         remove2_1( new  ArrayList<String>(list));
         remove3( new  ArrayList<String>(list));
     }
     public  static  void  remove1(List<String> list) {
         System.out.print( "第一种方法 - > " );
         try  {
             for  (String str : list) {
                 if  (str.equals( "list2" ))
                     list.remove(str);
             }
         catch  (Exception e) {
             System.out.println( "移除失败!" );
         }
     }
     public  static  void  remove2(List<String> list) {
         System.out.print( "第二种方法 - > " );
         for  ( int  i =  0 ; i < list.size(); i++) {
             String str = list.get(i);
             if  (str.equals( "list2" ))
                 list.remove(str);
         }
         System.out.println(list);
         System.out.println( "也有异常,可以用下面的方法避免。" );
     }
     public  static  void  remove2_1(List<String> list) {
         System.out.print( "第二种方法修正 - > " );
         for  ( int  i =  0 ; i < list.size(); i++) {
             String str = list.get(i);
             if  (str.equals( "list2" )) {
                 list.remove(str);
                 // 因移除了元素,位置发生偏移,需要重新对当前位置的元素进行判断。
                 i--;
             }
         }
         System.out.println(list);
     }
     public  static  void  remove3(List<String> list) {
         System.out.print( "第三种方法 - > " );
         Iterator<String> iter = list.iterator();
         while  (iter.hasNext()) {
             String str = iter.next();
             if  (str.equals( "list2" ))
                 iter.remove();
         }
         System.out.println(list);
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值