List和数组间的转换与排序。

 1 public class cccc {
 2     public static void main(String[] args) {
 3         //如果List里面存放的是基本类型中的整型时,
 4         //一定要指定为Integer包装类型,在做value删除时,
 5         //调用remove方法时一定要转化为Integer类型,不然是按照下标删除
 6         List<Integer> list = new ArrayList<Integer>();
 7         list.add(1);
 8         list.add(2);
 9         list.add(0);
10         list.add(5);
11         System.out.println(list);
12         list.remove((Integer)5);
13         System.out.println(list);
14         //在做数组和list集合做转化的时候,整型类型的数组一定要用包装Integer类型,不然转化成的list每一个元素都是数组类型。。
15         int[] num = new int[]{19,21,3,8,4,5};
16         List list2 = Arrays.asList(num);
17         System.out.println(list2);20         Integer[] num2 = new Integer[]{19,21,3,8,4,5};
21         List list3 = Arrays.asList(num2);
22         System.out.println(list3);
23     }
24 }

输出如下:

List排序:

  1 1.java提供的默认list排序方法
  2 
  3 主要代码:
  4 
  5 List<String> list = new ArrayList();list.add("刘媛媛");
  6 
  7 list.add("王硕");
  8 list.add("李明");
  9 list.add("刘迪");
 10 list.add("刘布");
 11 
 12 //升序
 13 Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
 14 for(int i=0;i<list.size();i++)
 15 {
 16     System.out.print(list.get(i));
 17 }
 18 System.out.println("");
 19 
 20 //降序
 21 Collections.reverse(list);//不指定排序规则时,也是按照字母的来排序的
 22 for(int i=0;i<list.size();i++)
 23 {
 24      System.out.print(list.get(i));
 25 }
 26 
 27 输出结果:
 28 
 29 李明刘布刘迪刘媛媛王硕
 30 王硕刘媛媛刘迪刘布李明
 31 
 32  
 33 
 34 2.自定义的排序规则:
 35 
 36 第一种是model类实现Comparable接口,重写重写int compareTo(Object o)方法
 37 
 38             model类:
 39 
 40 public class StudentDTO implements Comparable
 41 {
 42  private String name;
 43  private int age;
 44 
 45 public String getName()
 46 {
 47     return name;
 48 }
 49 
 50 public void setName(String name)
 51 {
 52      this.name = name;
 53 }
 54 
 55 public ObjType getType()
 56 {
 57     return type;
 58 }
 59 
 60 public void setAge(int age)
 61 {
 62      this.age= age;
 63 }
 64 
 65 @Override
 66 public int compareTo(Object o)
 67 {
 68 
 69        StudentDTO sdto = (StudentDTO)o;
 70 
 71        int otherAge = sdto.getAge();
 72       // note: enum-type's comparation depend on types' list order of enum method
 73       // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order
 74 
 75 
 76       return this.age.compareTo(otherAge);
 77 }
 78 }
 79 
 80            主方法:           
 81 
 82 public static void main(String[] args)
 83 {
 84       List<StudentDTO> studentList = new ArrayList();
 85 
 86       StudentDTO s1 = new StudentDTO ();
 87 
 88       s.setName("yuanyuan");
 89 
 90       s.setAge(22);
 91 
 92       studentList.add(s1);
 93 
 94                   StudentDTO s1 = new StudentDTO ();
 95 
 96                   s.setName("lily");
 97 
 98                   s.setAge(23);
 99 
100                   studentList.add(s2);
101 
102                   Collections.sort(studentList);  //按照age升序 22,23,
103 
104                  Collections.reverse(studentList);  //按照age降序 23,22   
105 
106 }
107 
108 第二种是比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法;
109 
110            model类:           
111 
112 public class StudentDTO implements Comparable
113 {
114      private String name;
115      private int age;
116 
117      public String getName()
118      {
119          return name;
120      }
121 
122      public void setName(String name)
123     {
124          this.name = name;
125      }
126 
127      public ObjType getType()
128      {
129          return type;
130      }
131 
132      public void setAge(int age)
133      {
134          this.age= age;
135      }
136 
137 } 
138 
139            比较器类:
140 
141 class MyCompartor implements Comparator
142 {
143      @Override
144      public int compare(Object o1, Object o2)
145     {
146 
147            StudentDTO sdto1= (StudentDTO )o1;
148 
149            StudentDTO sdto2= (StudentDTO )o2;
150 
151            return sdto1.getAge.compareTo(stdo2.getAge())
152 
153     }
154 }
155 
156            主方法:
157 
158 public static void main(String[] args)
159 {
160       List<StudentDTO> studentList = new ArrayList();
161 
162       StudentDTO s1 = new StudentDTO ();
163 
164       s.setName("yuanyuan");
165 
166       s.setAge(22);
167 
168       studentList.add(s1);
169 
170       StudentDTO s1 = new StudentDTO ();
171 
172       s.setName("lily");
173 
174       s.setAge(23);
175 
176       studentList.add(s2);
177 
178       MyComparetor mc = new MyComparetor();
179 
180       Collections.sort(studentList,mc);     //按照age升序 22,23,
181 
182       Collections.reverse(studentList,mc);    //按照age降序 23,22   
183 
184 }
185 
186  
187 
188  
189 
190 附注:
191 
192 1.对于数组的排序方法如下:
193 
194 String[] names = {"王林",  "杨宝", "李镇", "刘迪", "刘波"};  
195 Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//升序;   
196 System.out.println(Arrays.toString(names));      
197 
198 2.对于汉字的排序:可以尝试使用ICU4J会得到更好的结果,特别是姓为某些生僻字的时候,
199 
200 用com.ibm.icu.text.Collator替换java.text.Collator,用com.ibm.icu.util.ULocale替换java.util.Locale
201 
202 3.对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,
203 
204 而不是按照值的字母先后顺序比较的。

 

posted @ 2017-04-18 15:09  红色小宇宙  阅读(1933)  评论(0编辑  收藏  举报