黑马程序员_java基础7--Map和Collections和Arrays
2012-08-31 23:18
465 查看
------- android培训、java培训、期待与您交流! ----------
@@(day16)Map和Collections-Arrays工具类和其他对象***********************************************************************
/*
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value) //返回被覆盖的值!没有则为null。
putAll(Map<? extends K,? extends V> m)
2,删除。
clear()
remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取。
get(Object key) //没有则返回null
size()
values() //返回值 的集合。Collection<Integer> coll = map.values();
5取出方式
Set<String> keySet = map.keySet(); V value = map.get(K key)
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Hashtable和HashMap用作键的对象必须实现 hashCode 方法和 equals 方法
和Set很像。
其实大家,Set底层就是使用了Map集合。
@@map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
/*
//先获取map集合的所有键的Set集合,keySet();
Set<String> keySet = map.keySet();
//有了Set集合。就可以获取其迭代器。
Iterator<String> it = keySet.iterator();
while(it.hasNext())
{
String key = it.next();
//有了键可以通过map集合的get方法获取其对应的值。
String value = map.get(key);
System.out.println("key:"+key+",value:"+value);
}
*/
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素
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);
}
@@一个重要的例子:
import java.util.*;
class Person implements Comparable<Person>
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name==p.name && this.age==p.age;
}
public int hashCode()
{
return this.name.hashCode()+this.age*33;
}
public int compareTo(Person p)
{
int num = this.name.compareTo(p.name);
if(num == 0)
return (this.age-p.age);
return num;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return name+"的年龄是"+age;
}
}
class demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Map<Person,String> map = new HashMap<Person,String>();
map.put(new Person("java01",11),"北京");
map.put(new Person("java02",22),"南极");
map.put(new Person("java01",11),"上海");
Collection<String> al = map.values();
sop(al);//打印结果 [南极,上海]
sop(map);//打印结果 {java02的年龄是22=南极,java01的年龄是11=上海}
//第一种方法取出map集合中的元素
Set<Person> keySet = map.keySet();
Iterator<Person> it = keySet.iterator();
while(it.hasNext())
{
Person key = it.next();
String value = map.get(key);
sop(key+"::"+value);
}
//第二种方法取出map集合中的元素
Set<Map.Entry<Person,String>> entrySet = map.entrySet();
Iterator<Map.Entry<Person,String>> it2 = entrySet.iterator();
while(it2.hasNext())
{
Map.Entry<Person,String> me = it2.next();
Person key = me.getKey();
String value = me.getValue();
sop(key+"="+value);
}
//打印字符串中每个字符出现的次数。
String s = charCount("sdfgzxcv66dfs5asdfx--cvdfxxx");
sop(s);
}
//打印字符串中每个字符出现的次数。
public static String charCount(String str)
{
Map<Character,Integer> map = new TreeMap<Character,Integer>();
char[] ch = str.toCharArray();
int count = 0;
for(int x = 0;x<ch.length;x++)
{
if( !(ch[x]>='a'&&ch[x]<='z'||ch[x]<='Z'&&ch[x]>='A') )
continue;
Integer value = map.get(ch[x]);
if(value!=null)
count = value;
count++;
map.put(ch[x],count);
count = 0;//************************重点
}
sop(map);
Iterator<Character> it = map.keySet().iterator();
StringBuilder sb = new StringBuilder();
while(it.hasNext())
{
Character key = it.next();
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
@@(day17Collections和Arrays工具类)**********************************************************************
@@Collections 工具类(内部方法都是静态的)
集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。
Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
1==sort()*****************************只对List进行排序~~~~~~~~~~
static <T extends Comparable<? super T>> void
sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
static <T> void
sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。
------------------------------------------------------------------
2==max()--min()************************求Collection的最大最小值~~~~~~~~
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 的最大元素。
static <T extends Object & Comparable<? super T>> T
min(Collection<? extends T> coll)
根据元素的自然顺序 返回给定 collection 的最小元素。
static <T> T
min(Collection<? extends T> coll, Comparator<? super T> comp)
根据指定比较器产生的顺序,返回给定 collection 的最小元素。
--------------------------------------------------------------------
3==binarySearch**找不到则返回(-(插入点)-1)*****只对有序的List中的元素进行查找~~~~~
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)
使用二分搜索法搜索指定列表,以获得指定对象。
-——————————————————————————————————————————————————————————————————————————————————
4==fill***将List中的元素全部换成obj****==replaceAll替换List中的一个元素。
static <T>void
fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。
static <T> boolean
replaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。
———————————————————————————————————————————————————————————————————————————————
5==reverse反转,**************交换swap***************
static void
reverse(List<?> list)
反转指定列表中元素的顺序。
static <T> Comparator<T>
reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
static <T> Comparator<T>
reverseOrder(Comparator<T> cmp)
返回一个比较器,它强行逆转指定比较器的顺序。
static void
swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。
———————————————————————————————————————————————————————————————————————————————
6将不同步的集合变为同步的集合==原理:将原来不同步的集合中的方法中的语句用同步代码块封装下。
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。
static <K,V> SortedMap<K,V>
synchronizedSortedMap(SortedMap<K,V> m)
返回指定有序映射支持的同步(线程安全的)有序映射。
static <T> SortedSet<T>
synchronizedSortedSet(SortedSet<T> s)
返回指定有序 set 支持的同步(线程安全的)有序 set。
———————————————————————————————————————————————————————————————————————————————
7==将列表中的元素位置进行 随机置换。
static void shuffle(List<?> list)
使用默认随机源对指定列表进行置换。
static void shuffle(List<?> list, Random rnd)
使用指定的随机源对指定列表进行置换。
———————————————————————————————————————————————————————————————————————————————
@@Arrays
static <T> List<T>
asList(T... a)
返回一个受指定数组支持的固定大小的列表。
static int binarySearch(byte[] a, byte key)
使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。
static byte[] copyOf(byte[] original, int newLength)
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
static byte[] copyOfRange(byte[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。
static boolean equals(byte[] a, byte[] a2)
如果两个指定的 byte 型数组彼此相等,则返回 true。
static void fill(byte[] a, int fromIndex, int toIndex, byte val)
将指定的 byte 值分配给指定 byte 型数组指定范围中的每个元素。
static int hashCode(byte[] a)
基于指定数组的内容返回哈希码。
static void sort(byte[] a, int fromIndex, int toIndex)
对指定 byte 型数组的指定范围按数字升序进行排序。
static String toString(byte[] a)
返回指定数组内容的字符串表示形式。
static <T> List<T>
asList(T... a)
返回一个受指定数组支持的固定大小的列表。
@@==》将数组变成List集合
//把数组变成list集合有什么好处?
/*
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。
contains。
get
set
indexOf()
subList();
如果你增删。那么会反生UnsupportedOperationException,
*/
int[] nums = {2,4,5};
List<int[]> li = Arrays.asList(nums);
Integer[] nums = {2,4,5};
List<Integer> li = Arrays.asList(nums);
/*
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的一个元素存在。
*/
@@==》集合变成数组toArray()
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
如果指定的数组T[] a能容纳列表,则将该列表返回此处。
否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。
如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),
那么会将数组中紧接 collection 尾部的元素设置为 null。
/*
1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。
2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
*/
String[] arr = al.toArray(new String[al.size()]);
System.out.println(Arrays.toString(arr));
@@增强for循环。(JDK1.5后) 底层封装了迭代器
在能使用迭代器的地方,如果只是想将集合或数组中的元素进行 获取操作,使用foreach简单些。、
高级for循环
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
{
}
对集合进行遍历。
!!只能 获取 集合元素。但是不能对集合元素进行操作。********************
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for有什么区别呢?
高级for有一个局限性。必须有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义脚标。
@@可变参数(JDK1.5后)
方法的可变参数。
在使用时注意:可变参数一定要定义在参数列表最后面。
/*
可变参数。
其实就是上一种数组参数的简写形式。
不用每一次都手动的建立数组对象。
只要将要操作的元素作为参数传递即可。
隐式将这些参数封装成了数组。
*/
public static void show(String str,int... arr)
{
System.out.println(arr.length);
}
show("haha",2,3,4,5,6);
show(2,3,4,5,6,4,2,35,9,"heh");//错误
show();//错误
public static void show(int... arr)
{
System.out.println(arr.length);
}
show(2,3,4,5,6);
show(2,3,4,5,6,4,2,35,9,"heh");//错误
show();//对 ,长度为 0
@@静态导入(JDK1.5后)
StaticImport 静态导入。
当类名重名时,需要指定具体的包名。
当方法重名是,指定该方法 具体所属的对象或者类。
*/
import java.util.*;
import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
import static java.util.Collections.*;
当类名重名时,需要指定具体的包名。
当方法重名是,指定该方法 具体所属的对象或者类。下例=>
packa/Demo.class
packb/Demo.class
import packa.*;
import packb.*;
new Demo()//不明确
应该new packa.Demo();或new packb.Demo();
*/
import java.util.*;
import static java.lang.System.*;//导入了System类中所有静态成员。
import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
import static java.util.Collections.*;
class StaticImport //extends Object
{
public static void main(String[] args)
{
out.println("haha");
int[] arr = {3,1,5};
sort(arr);
int index = binarySearch(arr,1);
out.println(Arrays.toString(arr));//当方法重名时,指定该方法 具体所属的对象或者类。分清toString是谁的方法。
out.println("Index="+index);
ArrayList al = new ArrayList();
al.add(1);
al.add(3);
al.add(2);
out.println(al);
sort(al);
out.println(al);
}
}
------- android培训、java培训、期待与您交流! ----------
@@(day16)Map和Collections-Arrays工具类和其他对象***********************************************************************
/*
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value) //返回被覆盖的值!没有则为null。
putAll(Map<? extends K,? extends V> m)
2,删除。
clear()
remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取。
get(Object key) //没有则返回null
size()
values() //返回值 的集合。Collection<Integer> coll = map.values();
5取出方式
Set<String> keySet = map.keySet(); V value = map.get(K key)
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Hashtable和HashMap用作键的对象必须实现 hashCode 方法和 equals 方法
和Set很像。
其实大家,Set底层就是使用了Map集合。
@@map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
/*
//先获取map集合的所有键的Set集合,keySet();
Set<String> keySet = map.keySet();
//有了Set集合。就可以获取其迭代器。
Iterator<String> it = keySet.iterator();
while(it.hasNext())
{
String key = it.next();
//有了键可以通过map集合的get方法获取其对应的值。
String value = map.get(key);
System.out.println("key:"+key+",value:"+value);
}
*/
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素
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);
}
@@一个重要的例子:
import java.util.*;
class Person implements Comparable<Person>
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name==p.name && this.age==p.age;
}
public int hashCode()
{
return this.name.hashCode()+this.age*33;
}
public int compareTo(Person p)
{
int num = this.name.compareTo(p.name);
if(num == 0)
return (this.age-p.age);
return num;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return name+"的年龄是"+age;
}
}
class demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Map<Person,String> map = new HashMap<Person,String>();
map.put(new Person("java01",11),"北京");
map.put(new Person("java02",22),"南极");
map.put(new Person("java01",11),"上海");
Collection<String> al = map.values();
sop(al);//打印结果 [南极,上海]
sop(map);//打印结果 {java02的年龄是22=南极,java01的年龄是11=上海}
//第一种方法取出map集合中的元素
Set<Person> keySet = map.keySet();
Iterator<Person> it = keySet.iterator();
while(it.hasNext())
{
Person key = it.next();
String value = map.get(key);
sop(key+"::"+value);
}
//第二种方法取出map集合中的元素
Set<Map.Entry<Person,String>> entrySet = map.entrySet();
Iterator<Map.Entry<Person,String>> it2 = entrySet.iterator();
while(it2.hasNext())
{
Map.Entry<Person,String> me = it2.next();
Person key = me.getKey();
String value = me.getValue();
sop(key+"="+value);
}
//打印字符串中每个字符出现的次数。
String s = charCount("sdfgzxcv66dfs5asdfx--cvdfxxx");
sop(s);
}
//打印字符串中每个字符出现的次数。
public static String charCount(String str)
{
Map<Character,Integer> map = new TreeMap<Character,Integer>();
char[] ch = str.toCharArray();
int count = 0;
for(int x = 0;x<ch.length;x++)
{
if( !(ch[x]>='a'&&ch[x]<='z'||ch[x]<='Z'&&ch[x]>='A') )
continue;
Integer value = map.get(ch[x]);
if(value!=null)
count = value;
count++;
map.put(ch[x],count);
count = 0;//************************重点
}
sop(map);
Iterator<Character> it = map.keySet().iterator();
StringBuilder sb = new StringBuilder();
while(it.hasNext())
{
Character key = it.next();
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
@@(day17Collections和Arrays工具类)**********************************************************************
@@Collections 工具类(内部方法都是静态的)
集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。
Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
1==sort()*****************************只对List进行排序~~~~~~~~~~
static <T extends Comparable<? super T>> void
sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
static <T> void
sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。
------------------------------------------------------------------
2==max()--min()************************求Collection的最大最小值~~~~~~~~
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 的最大元素。
static <T extends Object & Comparable<? super T>> T
min(Collection<? extends T> coll)
根据元素的自然顺序 返回给定 collection 的最小元素。
static <T> T
min(Collection<? extends T> coll, Comparator<? super T> comp)
根据指定比较器产生的顺序,返回给定 collection 的最小元素。
--------------------------------------------------------------------
3==binarySearch**找不到则返回(-(插入点)-1)*****只对有序的List中的元素进行查找~~~~~
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)
使用二分搜索法搜索指定列表,以获得指定对象。
-——————————————————————————————————————————————————————————————————————————————————
4==fill***将List中的元素全部换成obj****==replaceAll替换List中的一个元素。
static <T>void
fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。
static <T> boolean
replaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值。
———————————————————————————————————————————————————————————————————————————————
5==reverse反转,**************交换swap***************
static void
reverse(List<?> list)
反转指定列表中元素的顺序。
static <T> Comparator<T>
reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
static <T> Comparator<T>
reverseOrder(Comparator<T> cmp)
返回一个比较器,它强行逆转指定比较器的顺序。
static void
swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。
———————————————————————————————————————————————————————————————————————————————
6将不同步的集合变为同步的集合==原理:将原来不同步的集合中的方法中的语句用同步代码块封装下。
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。
static <K,V> SortedMap<K,V>
synchronizedSortedMap(SortedMap<K,V> m)
返回指定有序映射支持的同步(线程安全的)有序映射。
static <T> SortedSet<T>
synchronizedSortedSet(SortedSet<T> s)
返回指定有序 set 支持的同步(线程安全的)有序 set。
———————————————————————————————————————————————————————————————————————————————
7==将列表中的元素位置进行 随机置换。
static void shuffle(List<?> list)
使用默认随机源对指定列表进行置换。
static void shuffle(List<?> list, Random rnd)
使用指定的随机源对指定列表进行置换。
———————————————————————————————————————————————————————————————————————————————
@@Arrays
static <T> List<T>
asList(T... a)
返回一个受指定数组支持的固定大小的列表。
static int binarySearch(byte[] a, byte key)
使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。
static byte[] copyOf(byte[] original, int newLength)
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
static byte[] copyOfRange(byte[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。
static boolean equals(byte[] a, byte[] a2)
如果两个指定的 byte 型数组彼此相等,则返回 true。
static void fill(byte[] a, int fromIndex, int toIndex, byte val)
将指定的 byte 值分配给指定 byte 型数组指定范围中的每个元素。
static int hashCode(byte[] a)
基于指定数组的内容返回哈希码。
static void sort(byte[] a, int fromIndex, int toIndex)
对指定 byte 型数组的指定范围按数字升序进行排序。
static String toString(byte[] a)
返回指定数组内容的字符串表示形式。
static <T> List<T>
asList(T... a)
返回一个受指定数组支持的固定大小的列表。
@@==》将数组变成List集合
//把数组变成list集合有什么好处?
/*
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。
contains。
get
set
indexOf()
subList();
如果你增删。那么会反生UnsupportedOperationException,
*/
int[] nums = {2,4,5};
List<int[]> li = Arrays.asList(nums);
Integer[] nums = {2,4,5};
List<Integer> li = Arrays.asList(nums);
/*
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的一个元素存在。
*/
@@==》集合变成数组toArray()
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
如果指定的数组T[] a能容纳列表,则将该列表返回此处。
否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。
如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),
那么会将数组中紧接 collection 尾部的元素设置为 null。
/*
1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。
2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
*/
String[] arr = al.toArray(new String[al.size()]);
System.out.println(Arrays.toString(arr));
@@增强for循环。(JDK1.5后) 底层封装了迭代器
在能使用迭代器的地方,如果只是想将集合或数组中的元素进行 获取操作,使用foreach简单些。、
高级for循环
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
{
}
对集合进行遍历。
!!只能 获取 集合元素。但是不能对集合元素进行操作。********************
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for有什么区别呢?
高级for有一个局限性。必须有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义脚标。
@@可变参数(JDK1.5后)
方法的可变参数。
在使用时注意:可变参数一定要定义在参数列表最后面。
/*
可变参数。
其实就是上一种数组参数的简写形式。
不用每一次都手动的建立数组对象。
只要将要操作的元素作为参数传递即可。
隐式将这些参数封装成了数组。
*/
public static void show(String str,int... arr)
{
System.out.println(arr.length);
}
show("haha",2,3,4,5,6);
show(2,3,4,5,6,4,2,35,9,"heh");//错误
show();//错误
public static void show(int... arr)
{
System.out.println(arr.length);
}
show(2,3,4,5,6);
show(2,3,4,5,6,4,2,35,9,"heh");//错误
show();//对 ,长度为 0
@@静态导入(JDK1.5后)
StaticImport 静态导入。
当类名重名时,需要指定具体的包名。
当方法重名是,指定该方法 具体所属的对象或者类。
*/
import java.util.*;
import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
import static java.util.Collections.*;
当类名重名时,需要指定具体的包名。
当方法重名是,指定该方法 具体所属的对象或者类。下例=>
packa/Demo.class
packb/Demo.class
import packa.*;
import packb.*;
new Demo()//不明确
应该new packa.Demo();或new packb.Demo();
*/
import java.util.*;
import static java.lang.System.*;//导入了System类中所有静态成员。
import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
import static java.util.Collections.*;
class StaticImport //extends Object
{
public static void main(String[] args)
{
out.println("haha");
int[] arr = {3,1,5};
sort(arr);
int index = binarySearch(arr,1);
out.println(Arrays.toString(arr));//当方法重名时,指定该方法 具体所属的对象或者类。分清toString是谁的方法。
out.println("Index="+index);
ArrayList al = new ArrayList();
al.add(1);
al.add(3);
al.add(2);
out.println(al);
sort(al);
out.println(al);
}
}
------- android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员_毕向东JAVA基础_集合(3)Map&Collections&Arrays&增强for循环
- 黑马程序员——Java基础---集合<二>Map,Arrays,Collections
- 黑马程序员——Java语言基础:集合框架(Collection、Map,工具类Collections、Arrays)
- 黑马程序员——JAVA基础——集合---概述、Collection中共性方法、List、Map、工具类Collections和Arrays
- 黑马程序员—java基础学习--Map集合、Collections,Arrays工具类
- 黑马程序员——Java基础---Collections,Arrays工具类以及其他对象
- 黑马程序员---2015.6.22java基础笔记---Collections---Arrays---方法的可变参数---常用类介绍
- 黑马程序员——Java基础工具类---Collections、Arrays、超级for循环、静态导入、方法可变参数
- 黑马程序员----------Java基础------------Collections和Arrays
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 工具类 Collections and Arrays
- Java基础复习:Map集合常用类 && Collections类 && Arrays类
- java基础-API-集合框架-Map、Collections、Arrays
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——Java基础---泛型、集合框架工具类:Collections和Arrays、JDK 1.5新特性
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员_java_集合_Map_Collections_Arrays_TreeMap
- 黑马程序员——JAVA基础之Collections和Arrays,数组集合的转换
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
- Java基础---泛型、集合框架工具类:collections和Arrays (黑马程序员)