javaday17

    xiaoxiao2026-05-03  11

    collection类

    正向排序

    sort() 使用 Collections 类的静态方法 sort() 可以对集合中的元素进行升序排序。这要求列表中的所有元素都必须实现 Comparable 接口,而且所有元素都必须是使用指定比较器可相互比较的。

    sort() 方法主要有如下两种重载形式。 void sort(List list):根据元素的自然顺序对集合中的元素进行升序排序。 void sort(List list,Comparator comparator):按 comparator 参数指定的排序方式对集合中的元素进行排序。

    import java.util.*; class collect { public static void main(String[] args) { sortDemo(); } public static void sortDemo() { List<String> list = new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkkk"); list.add("qq"); sop(list); //Collections.sort(list); Collections.sort(list,new strlencompare()); sop(list); } public static void sop(Object obj) { System.out.println(obj); } } class strlencompare implements Comparator<String> { public int compare(String s1,String s2) { if(s1.length()>s2.length()) return 1; if(s1.length()<s2.length()) return -1; return s1.compareTo(s2); } }

    最大值: Collections.max(list,new strlencompare()); 二分搜索: 如果包含在列表中,则返回搜索键的索引,否则返回(-(插入点)-1);

    import java.util.*; class collect { public static void main(String[] args) { sortDemo(); } public static void sortDemo() { List<String> list = new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkkk"); list.add("qq"); sop(list); //Collections.sort(list); Collections.sort(list,new strlencompare()); sop(list); //int index = halfSearch(list,"aaa"); //int index=Collections.binarySearch(list,"aaaa"); int index = halfSearch2(list,"aaa",new strlencompare()); sop("index"+index); } public static int halfSearch(List<String> list,String key) { int max,mid,min; max=list.size()-1; min=0; while(min<=max) { mid=(max+min)>>1; String str=list.get(mid); int num = str.compareTo(key); /* 如果指定的数与参数相等返回0。 如果指定的数小于参数返回 -1。 如果指定的数大于参数返回 1。 */ if(num>0) max=mid-1; else if(num<0) min=mid+1; else return mid; } return -min-1; } public static int halfSearch2(List<String> list,String key,Comparator<String> cmp) { int max,mid,min; max=list.size()-1; min=0; while(min<=max) { mid=(max+min)>>1; String str=list.get(mid); int num = cmp.compare(str,key); /* 如果指定的数与参数相等返回0。 如果指定的数小于参数返回 -1。 如果指定的数大于参数返回 1。 */ if(num>0) max=mid-1; else if(num<0) min=mid+1; else return mid; } return -min-1; } public static void sop(Object obj) { System.out.println(obj); } } class strlencompare implements Comparator<String> { public int compare(String s1,String s2) { if(s1.length()>s2.length()) return 1; if(s1.length()<s2.length()) return -1; return s1.compareTo(s2); } }

    将数组变成list集合

    可以用集合的思想和方法来操作数组中的元素 但是不可以使用集合的增删方法

    String[] arr=[2,3,4]; List<String> list = Arrays.asList(arr);

    如果数组中的元素都是对象,那么变成集合时,数组中的元素直接转成集合中的元素。如果数组种的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

    将集合变成数组

    指定类型的数组要定义多长? 1.当指定类型的数组长度小于集合的size,会创建一个新的数组,长度为集合的size。 2.当指定类型的数组长度大于集合的size,就会使用传递进来的数组。 为什么要变数组 限定对元素的操作

    ArrayList<String> al = new ArrayList<String>(); al.add("abc1"); al.add("abc2"); String[] arr = al.toArray(new String(al.size());

    增强for循环

    格式: for(数据类型 变量名:被遍历的集合(collection)或者数组) {} HashMap的增强for循环

    HashMap<Integer,String>hm=new HashMap<Integer,String>(); hm.put(1,"a"); hm.put(2,"b"); Set<Integer>keyset=hm.keySet(); for(Integer i:keyset) {hm.get(i);} for(Map.Entry<Integer,String> me:hm.entrySet()) {me.getKey(); me.getValue();}

    可变参数

    不用每一次都手动建立数组对象, 可变参数一定要定义在参数列表的最后面 public static void show(String str,int… arr)

    静态导入

    最新回复(0)