collection是集合框架中的一个顶层接口。有List.、Set、Vector等子接口collections是集合的一个工具类。
static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。
static <T> void sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。import java.util.*;
class CollectionsDemo1
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("aaa");
list.add("bv");
list.add("a");
sop(list);
Collections.sort(List);//根据自然顺序排序。
Collections.sort(list,new MyCompare());//根据指定比较器的排序方法进行排序。
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class MyCompare implements Comparator<String>//定义一个比较器,按照字符串长度排序,如果长度一样,再调用String的compareTo方法比较两个字符串儿的字典顺序。
{
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);
}
}
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)根据元素的自然顺序,返回给定 collection 的最大元素。static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)根据指定比较器产生的顺序,返回给定 collection 的最大元素。
5,binarySearch及其他方法:
static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)使用二分搜索法搜索指定列表,以获得指定对象。static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)使用二分搜索法搜索指定列表,以获得指定对象。static <T> boolean addAll(Collection<? super T> c, T... elements)
将所有指定元素添加到指定 collection 中。static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。
static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
使用二分搜索法搜索指定列表,以获得指定对象。static <T> void copy(List<? super T> dest, List<? extends T> src)
将所有元素从一个列表复制到另一个列表。static <T> void fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。static <T> void fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。static void reverse(List<?> list)
反转指定列表中元素的顺序。static void swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。static <T> Comparator<T> reverseOrder()
static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。static void shuffle(List<?> list, Random rnd)
使用指定的随机源对指定列表进行置换。static <T> Collection<T> synchronizedCollection(Collection<T> c)
返回指定 collection 支持的同步(线程安全的)collection。
static <T> List<T> synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射。
static <T> Set<T> synchronizedSet(Set<T> s)
返回指定 set 支持的同步(线程安全的)set。
6,Arrays类:用于操作数组,里边都是static方法
import java.util.*;
class ArrDemo
{
public static void main(String[] args)
{
// int[] arr = new int[]{1,2,3};
Integer[] arr = {1,2,3};
List list_arr = Arrays.asList(arr);
sop(list_arr);
// sop(Arrays.toString(arr));//toString:将数组转换成字符串。
String[] arr1 = {"abc","def","ghi"};
List<String> list = Arrays.asList(arr1);
sop(list);
sop(list.contains("abc"));
sop(list.get(0));
sop(list.indexOf("abc"));
sop(list.subList(0,3));
// list.add("aaa");//UnsupportedOperationException
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
7,将集合转换成数组:
class ArraysARR
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
al.add("abc");
al.add("def");
al.add("ghi");
// System.out.println(al);
String[] arr = al.toArray(new String[9]);//[abc, def, ghi, null, null, null, null, null, null]
System.out.println(Arrays.toString(arr));
}
}
<T> T[] toArray(T[] a):返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
1,传递的数组长度定义多长?
如果定义的长度小于集合的长度,那么会该方法内部会创建一个新的数组,长度为al.size();
如果定义的长度大于集合的长度,那么就不会创建数组,而是使用传递进来的数组。
2,为什么要将集合转换成数组?
为了限定对元素增删的操作。
for(数据类型 变量名称:操作的数组或者集合(Collection)的名称)
2,高级for循环的用途:
用于获取集合或者数组中的元素。
但是不能对其中的元素进行增删改查等的操作。
iterator可以进行remove操作
listIterator可以对集合进行增删改查等操作。
3,高级for与传统for的区别:
高级for:简化了书写,但是必须有操作的对象,但不能进行角标操作。
传统的for:可以进行角标定义。
import java.util.*;
class Forfor
{
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add("abc");
list.add("efg");
list.add("ijk");
//高级for操作集合:
for(String s:list)
{
sop(s);
}
// Iterator it = list.iterator();
// while(it.hasNext())
// {
// sop(it.next());
// }
//高级for操作数组:
int[] arr = new int[]{1,2,3,4};
for(int x:arr)
{
sop(x);
}
// for(int x=0;x<arr.length;x++)
// {
// sop(arr[x]);
// }
//利用高级for遍历Map集合:
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(11,"haha");
map.put(22,"ahha");
map.put(33,"opop");
//1,使用keySet方法:
// Set<Integer> keySet = map.keySet();
// for(Integer i:keySet)
// {
// sop(i+"::"+map.get(i));
// }
//2,使用entrySet方法:
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
for(Map.Entry<Integer,String> ii:entrySet)
{
sop(ii.getKey()+":::::"+ii.getValue());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
// 可变参数:其实就是数组的简写形式,不用每一次都手动建立对象,只需要将操作的元素作为参数传递即可,隐式将这些参数转换成了数组。
class Jdk
{
public static void main(String[] args)
{
show("hhhh",1,2,3,4);//传递多次参数:参数类型要一致;可变参数一定要定义在参数列表的最后面。
// show(1,2);
}
public static void show(String str,int... arr)
{
System.out.println(arr.length);
}
}
import static java.util.Arrays.*;//导入了Arrays类中所有的静态成员。
import static java.util.Collections.*;
import static java.lang.System.*;
class staticImport
{
public static void main(String[] args)
{
int[] arr = new int[]{11,2,32,4};
sort(arr);
out.println(Arrays.toString(arr));
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("c");
list.add("b");
sort(list);
out.println(list);
}
}