@liayun
2016-06-02T15:47:02.000000Z
字数 20425
阅读 2198
java基础
Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性。
Map集合中的常用方法:
put(K key, V value)putAll(Map<? extends K,? extends V> m)clear()remove(Object key)containsKey(Object key)containsValue(Object value)isEmpty()get(Object key)size()values()entrySet()keySet() 创建一个集合容器,使用Map接口的子类——HashMap
Map<String, String> map = new HashMap<String, String>();
map.put("01", "zhangsan1");map.put("02", "zhangsan2");map.put("03", "zhangsan3");
注意:添加元素时,如果出现相同的键,那么后添加的值会覆盖原有的键对应的值,并且put()方会法返回被覆盖的值。
System.out.println("put:"+map.put("01", "zhangsan1")); // null,因为"01"键所对应的原来的值为nullSystem.out.println("put:"+map.put("01", "wangwu")); // zhangsan1,因为此时"01"键所对应的原来的值为"zhangsan1"
System.out.println("containsKey:"+map.containsKey("022")); // containsKey:false
System.out.println("remove:"+map.remove("02")); // remove:zhangsan2
System.out.println("get:"+map.get("023")); // get:null
HashMap允许使用null值和null键,如:
map.put("04", null);System.out.println("get:"+map.get("04")); // get:nullmap.put(null, "haha");System.out.println("get:"+map.get(null)); // get:haha
Collection<String> coll = map.values();System.out.println(coll);
Map和Set很像,其实,Set底层就是使用了Map集合。
Map集合的两种取出方式:
Set<K> keySet():将map所有的键存入到Set集合,因为Set集合具备迭代器,所以可以通过迭代方式取出所有的键,在根据get()方法,获取每一个键对应的值。Map集合的取出原理:将map集合转成set集合,在通过迭代器取出。Set<Map.Entry<K,V>> entrySet():将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry。第一种取出方式:
import java.util.*;class MapDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("02", "zhangsan2");map.put("03", "zhangsan3");map.put("01", "zhangsan1");map.put("04", "zhangsan4");// 先获取map集合的所有的键的Set集合,keySet()Set<String> ketSet = map.keySet();// 有了Set集合,就可以获取其迭代器Iterator<String> it = ketSet.iterator();while(it.hasNext()) {String key = it.next();// 有了键就可以通过map集合的get()方法获取其对应的值String value = map.get(key);System.out.println("key:"+key+", value:"+value);}}}
第二种取出方式:
import java.util.*;class MapDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("02", "zhangsan2");map.put("03", "zhangsan3");map.put("01", "zhangsan1");map.put("04", "zhangsan4");// 将map集合中的映射关系取出,存入到set集合中Set<Map.Entry<String, String>> entrySet = map.entrySet();Iterator<Map.Entry<String, String>> it = entrySet.iterator();while(it.hasNext()) {Map.Entry<String, String> me = it.next();String key = me.getKey();String value = me.getValue();System.out.println(key+":"+value);}}}
Map.Entry,其实Entry也是一个接口,它是Map接口中的一个内部接口。源码我们可以理解为:
interface Map {public static interface Entry {public abstract Object getKey();public abstract Object getValue();}}class HashMap implements Map {class HaHa implements Map.Entry {public Object getKey() {}public Object getValue() {}}}
练习一:每一个学生都有对应的归属地。学生Student,地址String。学生属性:姓名,年龄。注意:姓名和年龄相同的视为同一个学生。保证学生的唯一性。
解:
分析:
描述学生:
class Student implements Comparable<Student> {private String name;private int age;Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}public String toString() {return name + ":" + age;}public int hashCode() {return name.hashCode() + age * 34;}public boolean equals(Object obj) {if(!(obj instanceof Student))throw new ClassCastException("类型不匹配");Student s = (Student)obj;return this.name.equals(s.name) && this.age == s.age;}public int compareTo(Student s) {int num = new Integer(this.age).compareTo(new Integer(s.age));if(num == 0)return this.name.compareTo(s.name);return num;}}
定义Map容器,将学生作为键,地址作为值存入。
HashMap<Student, String> hm = new HashMap<Student, String>();hm.put(new Student("lisi1", 21), "beijing");hm.put(new Student("lisi1", 21), "tianjin"); // 会覆盖掉键所对应的前一个值hm.put(new Student("lisi2", 22), "shanghai");hm.put(new Student("lisi3", 23), "nanjing");hm.put(new Student("lisi4", 24), "wuhan");
获取map集合中的元素。
// 第一种取出方式 keySet()Iterator<Student> it = hm.keySet().iterator();while(it.hasNext()) {Student stu = it.next();String addr = hm.get(stu);System.out.println(stu+"..."+addr);}// 第二种取出方式 entrySet()Set<Map.Entry<Student, String>> entrySet = hm.entrySet();Iterator<Map.Entry<Student, String>> iter = entrySet.iterator();while(iter.hasNext()) {Map.Entry<Student, String> me = iter.next();Student stu = me.getKey();String addr = me.getValue();System.out.println(stu+".........."+addr);}
练习二:需求:对学生对象的姓名进行升序排序。
解:
分析:因为数据是以键值对的形式存在的。所以要使用可以排序的Map集合。TreeMap。
学生对象在练习一中我们已描述,在此省略。
定义一个按姓名排序的比较器:
class StuNameComparator implements Comparator<Student> {public int compare(Student s1, Student s2) {int num = s1.getName().compareTo(s2.getName());if(num == 0)return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));return num;}}
调用代码:
class MapTest {public static void main(String[] args) {TreeMap<Student, String> tm = new TreeMap<Student, String>(new StuNameComparator());tm.put(new Student("blisi3", 23), "nanjing");tm.put(new Student("lisi1", 21), "beijing");tm.put(new Student("alisi4", 24), "wuhan");tm.put(new Student("lisi1", 21), "tianjin"); // 会覆盖掉键所对应的前一个值tm.put(new Student("lisi2", 22), "shanghai");Set<Map.Entry<Student, String>> entrySet = tm.entrySet();Iterator<Map.Entry<Student, String>> it = entrySet.iterator();while(it.hasNext()) {Map.Entry<Student, String> me = it.next();Student stu = me.getKey();String addr = me.getValue();System.out.println(stu+":::"+addr);}}}
练习三:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。希望打印结果:a(1)c(2)...。
解:
分析:通过结果发现,每一个字母都有对应的次数。说明字母和次数之间都有映射关系。注意:当发现有映射关系时,可以选择map集合。因为map集合中存放的就是映射关系。
本题思路:
我们可以定义一个方法来获取打印结果:
public static String charCount(String str) {char[] chs = str.toCharArray();TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();for (int x = 0; x < chs.length; x++) {if(!(chs[x] >= 'a' && chs[x] <= 'z' || chs[x] >= 'A' && chs[x] <= 'Z'))continue; // 如果非字符,则继续循环Integer value = tm.get(chs[x]);if(value == null) {tm.put(chs[x], 1);} else {value = value + 1;tm.put(chs[x], value);}}StringBuilder sb = new StringBuilder();Set<Map.Entry<Character, Integer>> entrySet = tm.entrySet();Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();while(it.hasNext()) {Map.Entry<Character, Integer> me = it.next();Character ch = me.getKey();Integer value = me.getValue();sb.append(ch+"("+value+")");}return sb.toString();}
可以进一步优化为:
public static String charCount(String str) {char[] chs = str.toCharArray();TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();int count = 0; // 定义一个变量记录次数for (int x = 0; x < chs.length; x++) {if(!(chs[x] >= 'a' && chs[x] <= 'z' || chs[x] >= 'A' && chs[x] <= 'Z'))continue; // 如果非字符,则继续循环Integer value = tm.get(chs[x]);if(value != null)count = value;count++;tm.put(chs[x], count);count = 0;}StringBuilder sb = new StringBuilder();Set<Map.Entry<Character, Integer>> entrySet = tm.entrySet();Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();while(it.hasNext()) {Map.Entry<Character, Integer> me = it.next();Character ch = me.getKey();Integer value = me.getValue();sb.append(ch+"("+value+")");}return sb.toString();}
调用代码:
public static void main(String[] args) {System.out.println(charCount("ak+abf-cdk,abc1defa"));}
问:什么时候使用map集合呢?
答:当数据之间存在着映射关系时,就要先想到map集合。
一对多的关系:一个学校有多个教室,每一个教室都有名称。一个教室有多个学生。假设学生属性:学号和姓名。
import java.util.*;class MapDemo {public static void main(String[] args) {// 首先定义一个学校HashMap<String, HashMap<String, String>> czbk = new HashMap<String, HashMap<String, String>>();// 接着再定义两个教室,预热班和就业班HashMap<String, String> yure = new HashMap<String, String>();HashMap<String, String> jiuye = new HashMap<String, String>();// 学校和教室建立对应关系czbk.put("yureban", yure);czbk.put("jiuyeban", jiuye);// 教室里面装有学生yure.put("01", "zhangsan");yure.put("02", "lisi");jiuye.put("01", "zhaoliu");jiuye.put("02", "wangwu");// 遍历czbk集合,获取所有的教室Iterator<String> it = czbk.keySet().iterator();while(it.hasNext()) {String roomName = it.next();HashMap<String, String> room = czbk.get(roomName);System.out.println(roomName);getStudentInfo(room);}}public static void getStudentInfo(HashMap<String, String> roomMap) {Iterator<String> it = roomMap.keySet().iterator();while(it.hasNext()) {String id = it.next();String name = roomMap.get(id);System.out.println(id+"::"+name);}}}
class Student {private String id;private String name;public Student(String id, String name) {this.id = id;this.name = name;}public String toString() {return id + ":::" + name;}}
class MapDemo3 {public static void demo() {// 首先定义一个学校HashMap<String, List<Student>> czbk = new HashMap<String, List<Student>>();// 接着再定义两个教室,预热班和就业班,注意此时使用的是List集合List<Student> yure = new ArrayList<Student>();List<Student> jiuye = new ArrayList<Student>();// 学校和教室建立对应关系czbk.put("yureban", yure);czbk.put("jiuyeban", jiuye);// 教室里面装有学生yure.add(new Student("01", "zhangsan"));yure.add(new Student("04", "wangwu"));jiuye.add(new Student("01", "zhouqi"));jiuye.add(new Student("02", "zhaoliu"));Iterator<String> it = czbk.keySet().iterator();while(it.hasNext()) {String roomName = it.next();List<Student> room = czbk.get(roomName);System.out.println(roomName);getInfos(room);}}public static void getInfos(List<Student> list) {Iterator<Student> it = list.iterator();while(it.hasNext()) {Student s = it.next();System.out.println(s);}}public static void main(String[] args) {demo();}}
sort()
public static <T extends Comparable<? super T>> void sort(List<T> list):根据元素的自然顺序对指定列表按升序进行排序,列表中的所有元素都必须实现comparable接口。
public static void sortDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");System.out.println(list);Collections.sort(list);System.out.println(list);}
public static <T> void sort(List<T> list, Comparator<? super T> c):根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较。
class StrLenComparator 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);}}public static void sortDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");System.out.println(list);Collections.sort(list, new StrLenComparator());System.out.println(list);}
max()
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll):根据元素的自然顺序,返回给定collection的最大元素。collection中的所有元素都必须实现comparable接口。
public static void maxDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list); // 可以看出元素的自然顺序结果System.out.println(list);String max = Collections.max(list);System.out.println("max="+max);}
public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp):根据指定比较器产生的顺序,返回给定collection的最大元素。collection中的所有元素都必须可通过指定比较器相互比较。
class StrLenComparator 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);}}public static void maxDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list, new StrLenComparator()); // 可以看出根据指定比较器产生的顺序System.out.println(list);String max = Collections.max(list, new StrLenComparator());System.out.println("max="+max);}
binarySearch()
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key):使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过sort(List)方法)。如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
public static void binarySearchDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list);System.out.println(list);int index = Collections.binarySearch(list, "aaa");System.out.println("index="+index); // index=0}
其原理是:
public static int halfSearch(List<String> list, String key) {int max, min, mid;max = list.size() - 1;min = 0;while(min <= max) {mid = (max + min) >> 1; // /2String str = list.get(mid);int num = str.compareTo(key);if(num > 0)max = mid - 1;else if(num < 0)min = mid + 1;elsereturn mid;}return -min-1;}
调用halfSearch方法:
public static void binarySearchDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list);System.out.println(list);int index = halfSearch(list, "aaaa");System.out.println("index="+index); // index=-2}
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c):使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据指定的比较器对列表进行升序排序(通过sort(List, Comparator) 方法)。
class StrLenComparator 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);}}public static void binarySearchDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list, new StrLenComparator());System.out.println(list);int index = Collections.binarySearch(list, "aaa", new StrLenComparator());System.out.println("index="+index); // index=3}
其原理是:
public static int halfSearch(List<String> list, String key, Comparator<String> cmp) {int max, min, mid;max = list.size() - 1;min = 0;while(min <= max) {mid = (max + min) >> 1; // /2String str = list.get(mid);int num = cmp.compare(str, key);if(num > 0)max = mid - 1;else if(num < 0)min = mid + 1;elsereturn mid;}return -min-1;}
调用halfSearch方法:
class StrLenComparator 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);}}public static void binarySearchDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");Collections.sort(list, new StrLenComparator());System.out.println(list);int index = halfSearch(list, "cc", new StrLenComparator());System.out.println("index="+index); // index=-2}
public static <T> void fill(List<? super T> list, T obj):使用指定元素替换指定列表中的所有元素。
public static void fillDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");System.out.println(list);Collections.fill(list,"pp");System.out.println(list);}
练习:复写fill(),将list集合中部分元素替换成指定元素。
public static void fillDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");System.out.println(list);fill(list, 1, 3, "hello");System.out.println(list);}public static void fill(List<String> list, int start, int end, String str) {for(int i = start; i < end; i++) {list.set(i, str);}}
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal):使用另一个值替换列表中出现的所有某一指定值。
public static void replaceAllDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");System.out.println(list);Collections.replaceAll(list, "aaa", "pp");System.out.println(list);}
public static void reverse(List<?> list):反转指定列表中元素的顺序。
public static void replaceAllDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");System.out.println(list);Collections.reverse(list);System.out.println(list);}
reverseOrder()
public static <T> Comparator<T> reverseOrder():返回一个比较器,它强行逆转实现了Comparable接口的对象collection的自然顺序。按照字符串的自然顺序排序:
public static void orderDemo() {TreeSet<String> ts = new TreeSet<String>();ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
反转其自然排序:
public static void orderDemo() {TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
当然还可以这样做:
定义一个按照字符串的自然顺序排序的比较器:
class StrComparator implements Comparator<String> {public int compare(String s1, String s2) {// 这样写太繁琐/*int num = s1.compareTo(s2);if(num > 0)return -1;if(num < 0)return 1;return num;*/return s2.compareTo(s1); // 简写}}
调用此比较器:
public static void orderDemo() {TreeSet<String> ts = new TreeSet<String>(new StrComparator());ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp):返回一个比较器,它强行逆转指定比较器的顺序。定义一个按照字符串的长度排序的比较器:
class StrLenComparator 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);}}
按照字符串的长度排序:
public static void orderDemo() {TreeSet<String> ts = new TreeSet<String>(new StrLenComparator());ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
反转其顺序:
public static void orderDemo() {TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));ts.add("abcde");ts.add("aaa");ts.add("k");ts.add("cc");Iterator it = ts.iterator();while(it.hasNext()) {System.out.println(it.next());}}
public static void shuffle(List<?> list):使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。
public static void shuffleDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");System.out.println(list);Collections.shuffle(list);System.out.println(list);}
swap(List<?> list, int i, int j):在指定列表的指定位置处交换元素。(如果指定位置相同,则调用此方法不会更改列表。)
public static void sortDemo() {List<String> list = new ArrayList<String>();list.add("abcd");list.add("aaa");list.add("zz");list.add("kkkkk");list.add("qq");list.add("z");System.out.println(list);Collections.swap(list, 1, 2);System.out.println(list);}
Arrays:用于操作数组的工具类。里面都是静态方法。
toString():返回指定数组内容的字符串表示形式。
int[] arr = {2, 4, 5};System.out.println(Arrays.toString(arr));
public static <T> List<T> asList(T... a):返回一个受指定数组支持的固定大小的列表。
String[] arr = {"abc", "cc", "kkkk"};List<String> list = Arrays.asList(arr);System.out.println("contains:"+list.contains("cc"));// list.add("qq"); // UnsupportedOperationExceptionSystem.out.println(list);
把数组变成list集合有什么好处?
答:可以使用集合的思想和方法来操作数组中的元素。注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的。可以使用集合的诸如contains()、get()、indexOf()、subList()等等方法,如果你增删,那么会生成UnsupportedOperationException。
再看下面一段代码:
int[] nums = {2, 4, 5};List li = Arrays.asList(nums);System.out.println(li);
此时输出[[I@139a55]类似结果,以上代码没有使用泛型,使用泛型应是如此:
int[] nums = {2, 4, 5};List<int[]> li = Arrays.asList(nums);System.out.println(li);
如果代码修改为:
Integer[] nums = {2,4,5};List<Integer> li = Arrays.asList(nums);System.out.println(li);
此时输出[2, 4, 5],所以,得出结论:如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组([[I@139a55])作为集合中的元素存在。
例,Collections接口中的toArray()方法的应用。
import java.util.*;class CollectionToArray {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("abc1");al.add("abc2");al.add("abc3");String[] arr = al.toArray(new String[al.size()]);System.out.println(Arrays.toString(arr));}}
格式:
for(数据类型(一般是泛型类型) 变量名 : 被遍历的集合(Collection)或者数组) {}
例,遍历集合。
ArrayList<String> al = new ArrayList<String>();al.add("abc1");al.add("abc2");al.add("abc3");
之前我们使用迭代器遍历:
Iterator<String> it = al.iterator();while(it.hasNext()) {System.out.println(it.next());}
现在我们可使用高级For循环,就简化书写了。
for(String s : al) {System.out.println(s);}
结论:高级For循环对集合进行遍历,只能获取集合中的元素,但是不能对集合进行操作。迭代器除了遍历,还可以进行remove()集合中元素的动作。如果使用ListIterator,还可以在遍历过程中进行对集合进行增删改查的操作。
对于数组int[] arr = {3,5,1};,我们可使用传统for循环:
for (int x = 0; x < arr.length; x++) {System.out.println(arr[x]);}
还可使用高级For循环:
for (int i : arr) {System.out.println("i:"+i);}
问:传统for和高级for有什么区别呢?
答:高级for有一个局限性,必须有被遍历的目标。
建议:在遍历数组的时候还是希望使用传统for,因为传统for可以定义角标。
对于Map集合,我们也可以使用高级For循环。
HashMap<Integer, String> hm = new HashMap<Integer, String>();hm.put(1, "a");hm.put(2, "b");hm.put(3, "c");
第一种遍历方式:
Set<Integer> keySet = hm.keySet();for (Integer i : keySet) {System.out.println(i+"::"+hm.get(i));}
第二种遍历方式:
for (Map.Entry<Integer, String> me : hm.entrySet()) {System.out.println(me.getKey()+"---"+me.getValue());}
JDK1.5版本出现的新特性。
可变参数:其实就是一种数组参数的简写形式,不用每一次都手动的建立数组对象,只要将要操作的元素作为参数传递即可,隐式地将这些参数封装成了数组。
class ParamMethodDemo {public static void main(String[] args) {show("gaga",2,3,4,5,6);}public static void show(String str, int... arr) {System.out.println(arr.length);}}
注意:方法的可变参数在使用时,可变参数一定要定义在参数列表的最后面。
例,
import java.util.*;import static java.util.Arrays.*; // 导入的是Arrays类中的所有静态成员。import static java.lang.System.*; // 导入了System类中所有静态成员。class StaticImport extends Object {public static void main(String[] args) {out.println("hello");int[] arr = {3,1,5};sort(arr);int index = binarySearch(arr, 1);System.out.println(Arrays.toString(arr)); // 此时不能省略Arrays,方法重名时,指定具备所属的对象或类。System.out.println("index="+index);}}
注意: