——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
集合二
Map
Map:一次添加一对元素,Collection一次添加一个元素。
Map也称为双列集合,Collection集合称为单列集合。
其实Map集合中存储的就是键值对。
map集合中必须保证键的唯一性。
常用方法:
1、添加
value put(key,value):返回前一个和key关联的值,如果没有返回null。
2、删除
void clear():清空map集合。
value remove(Object key):根据指定的key删除这个键值对。
3、判断
boolean containsKey(key);
boolean containsValue(value);
boolean isEmpty();
4、获取
value get(key):通过键获取值,如果没有该键返回null。
当然可以通过返回null,来判断是否包含指定键。
int size():获取键值对个数。
public static void main(String[] args){
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(8, "namea");
map.put(4, "nameb");
map.put(6, "namec");
map.put(4, "named");
System.out.println("获取元素方法一:--------------------- ");
Set<Integer> keySet = map.keySet();
Iterator<Integer> it = keySet.iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println(key+":"+map.get(key));
}
//移除
map.remove(6);
System.out.println("获取元素方法二--------------------");
Set<Map.Entry<Integer, String>> setEntry = map.entrySet();
Iterator<Map.Entry<Integer, String>> itEntry = setEntry.iterator();
while(itEntry.hasNext()){
Map.Entry<Integer, String> entry = itEntry.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
if(map.containsKey(8)){
System.out.println("map contain Key 8");
}else{
System.out.println("map didn't contain Key 8");
}
//清除全部
map.clear();
if(map.isEmpty()){
System.out.println("map 是空的");
}else{
System.out.println("map 不是空的");
}
}
Map常用的子类:
|–Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。
|–Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
|–HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。
|–TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。
hashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。
public static void main(String[] args) {
HashMap<Student, String> hm = new HashMap<Student, String>();
hm.put(new Student("lisi", 46), "北京");
hm.put(new Student("zhaoliu", 34), "上海");
hm.put(new Student("xiaoqiang", 31), "沈阳");
hm.put(new Student("wangcai", 28), "大连");
hm.put(new Student("zhaoliu", 24), "铁岭");
Iterator<Student> it = hm.keySet().iterator();
while (it.hasNext()) {
Student key = it.next();
System.out.println(key.getName() + ":" + key.getAge() + "-----"
+ hm.get(key));
}
}
}
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age) {
return false;
}
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name))
return false;
return true;
}
}
public static void main(String[] args) {
TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());
tm.put( new Student("lisi" ,38),"北京");
tm.put( new Student("zhaoliu" ,24),"上海");
tm.put( new Student("xiaoqiang" ,31),"沈阳");
tm.put( new Student("wangcai" ,28),"大连");
tm.put( new Student("zhaoliu" ,24),"铁岭");
Iterator<Student> it = tm.keySet().iterator();
while(it.hasNext()){
Student st = it.next();
System.out.println(st.getName()+":"+st.getAge()+"---"+tm.get(st));
}
}
}
class ComparatorByName implements Comparator<Student>{
public int compare(Student o1, Student o2) {
int temp = o1.getName().compareTo(o2.getName());
return temp ==0?o1.getAge()-o2.getAge():temp;
}
}
linkedHashMap
链表结构,与存入的顺序相关
public static void main(String[] args) {
HashMap<Integer,String> hm = new LinkedHashMap<Integer,String>();
hm.put(7, "zhouqi");
hm.put(3, "zhangsan");
hm.put(1, "qianyi");
hm.put(5, "wangwu");
Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, String> entry = it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
Collections 工具类
collections:是集合框架的工具类,里面的方法都是静态的。
void sort(List list);//对list进行排序
void sort(List list,Comparator comparator);//对list进行指定顺序排序
Comparator reverseOrder();//返回一个比较器,与原排序相反。
Comparator reverseOrder(Comparator com);//返回一个比较器,与传入的比较器排序相反。
void shuffle(List list) //对集合进行位置进行随机置换。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("zhangsan");
list.add("zhaoliu");
list.add("xiaoqiang");
sortDemo(list);
}
public static void sortDemo(List<String> list){
System.out.println(" -----------sort list-----------");
Collections.sort(list);
System.out.println(list);
System.out.println("----sort list depend on comparatorBylength-----");
Collections.sort(list, new ComparatorBylength());
System.out.println(list);
System.out.println("---------sortDemo----------");
//二分法查找目标位置
int index = Collections.binarySearch(list, "aaa");
System.out.println("index = "+index);
//获取最大值
String max = Collections.max(list, new ComparatorBylength());
System.out.println("max = " +max);
System.out.println("-----------获取随机列表-------");
Collections.shuffle(list);
System.out.println(list);
}
class ComparatorBylength implements Comparator<String>{
public int compare(String arg0, String arg1) {
int temp =arg0.length() - arg1.length();
return temp == 0?arg0.compareTo(arg1):temp;
}
}
Arrays工具类
Arrays:集合框架的工具类,里面的方法都是静态的。
Arrays.toString(list) 按数组格式打印数组
public static void main(String[] args) {
int[] arr = {3,1,5,6,4,7};
System.out.println(Arrays.toString(arr));
}
List Arrays.asList(list) 将数组转成集合,可以用集合的方法操作数组。
public static void main(String[] args) {
String[] arr = {"abc","haha","xil"};
List<String> list = Arrays.asList(arr);
System.out.println("list.contains(\"xil\") = "+list.contains("xil"));
}
数组的长度是固定的,所以对于结合的增删方法是不可以使用的,否则,会发生UnsupportedOperationException.
转换的过程中:
如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。
如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。
public static void main(String[] args) {
int[] arr = {31,11,51,61};
List<int[]> list1 = Arrays.asList(arr);
System.out.println(list1);
Integer[] arr2 = {31,11,51,65};
List<Integer> list2 =Arrays.asList(arr2);
System.out.println(list2);
}
集合转数组
使用的就是Collection接口中的toArray方法。
集合转成数组,可以对集合中的元素操作的方法进行限定,不允许对其进行增删。
toArray方法需要传入一个指定类型的数组。
长度该如何定义呢?
如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同的size的数组。如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。
结论:最后长度就指定为,集合的size。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc");
list.add("def");
list.add("ghi");
String[] arr = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
}
System类
long currentTimeMillis();获取当前时间的毫秒值,可以通过此方法检测程序的执行时间。
Properties getProperties();确定当前的系统属性。
Properties集合中存储的都是String类型的键和值。
最好使用它自己的存储和取出的方法来完成元素的操作。
public static void main(String[] args) {
long l1 = System.currentTimeMillis();
System.out.println(l1);
Properties prop = System.getProperties();
Set<String> nameset = prop.stringPropertyNames();
for(String name :nameset){
String value = prop.getProperty(name);
System.out.println(name +"="+value);
}
}
输出结果:
1447290953615
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jre7\bin
java.vm.version=24.71-b01
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=F:\workspace\ssic\my
java.runtime.version=1.7.0_71-b14
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files\Java\jre7\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\for\AppData\Local\Temp\
line.separator=
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 8.1
sun.jnu.encoding=GBK
java.library.path=C:\Program Files\Java\jre7\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Lenovo\FusionEngine;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Common Files\lenovo\easyplussdk\bin;C:\Program Files (x86)\iFLYTEK\VoiceAssistant\SpeechPlusRuntime;C:\Program Files (x86)\Lenovo\Voice SDK;C:\Program Files\Java\jdk1.7.0_71\bin;.
java.specification.name=Java Platform API Specification
java.class.version=51.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.3
user.home=C:\Users\for
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.7
user.name=for
java.class.path=F:\workspace\ssic\my\bin
java.vm.specification.version=1.7
sun.arch.data.model=64
java.home=C:\Program Files\Java\jre7
sun.java.command=day20.SystemDemo
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.7.0_71
java.ext.dirs=C:\Program Files\Java\jre7\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path=C:\Program Files\Java\jre7\lib\resources.jar;C:\Program Files\Java\jre7\lib\rt.jar;C:\Program Files\Java\jre7\lib\sunrsasign.jar;C:\Program Files\Java\jre7\lib\jsse.jar;C:\Program Files\Java\jre7\lib\jce.jar;C:\Program Files\Java\jre7\lib\charsets.jar;C:\Program Files\Java\jre7\lib\jfr.jar;C:\Program Files\Java\jre7\classes
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64
Runtime类
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。应用程序不能创建自己的 Runtime 类实例。
Math类
Math:提供了操作数学运算的方法
常用方法:
ceil():返回大于参数的最小整数。
floor():返回小于参数的最大整数。
round():返回四舍五入的整数。
pow(a,b):a的b次方。
public static void main(String[] args) {
System.out.println("Math.ceil(12.56) = "+Math.ceil(12.56));
System.out.println("Math.floor(12.56) = "+Math.floor(12.56));
System.out.println("Math.round(12.56) ="+Math.round(12.56));
System.out.println("Math.pow(2, 10) = "+Math.pow(2, 10));
Random r = new Random();
for(int i=0;i<5;i++){
System.out.println("Math.random()="+Math.random());
}
System.out.println("-----------");
for(int i=0;i<5;i++){
System.out.println("r.nextDouble()="+r.nextDouble());
}
}
Date、DateFormat类
日期对象和毫秒值之间的转换
毫秒值–>日期对象:
1. 通过Date对象的构造方法 new Date(timeMillis);
2. 还可以通过setTime设置。
因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。
日期对象–>毫秒值:
1. getTime方法。
因为可以通过具体的数值进行运算。
对日期对象进行格式化:
将日期对象–>日期格式的字符串。
使用的是DateFormat类中的format方法。
将日期格式的字符串–>日期对象。
使用的是DateFormat类中的prase方法。
public static void main(String[] args){
Date date1 = new Date();
System.out.println("date1 = "+date1);
long time = System.currentTimeMillis();
System.out.println("time = "+time);
Date date2 = new Date(time);
System.out.println("date2 "+date2);
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println("DateFormat.FULL = "+df.format(date1));
df = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println("DateFormat.LONG= "+df.format(date1));
df = new SimpleDateFormat("yyyy--MM--dd");
System.out.println("SimpleDateFormat ="+df.format(date1));
}
calendar类
Calendar可以对年月日等时间进行获取。并提供了相应的子段值。可参阅API文档。
字段:
获取年份:Calendar.YEAR
获取月份:Calendar.MONTH
获取日期:Calendar.DAY_OF_MONTH
获取星期:Calendar.DAY_OF_WEEK
获取小时:Calendar.HOUR_OF_DAY
获取分钟:Calendar.MINUTE
获取秒数:Calendar.SECOND
方法:
1.void add(int field,int amount);//为给定的日历字段添加或减去指定的时间量
2.void set(int field,int value);//将给定日历字段对应的时间值设置为给定值
3. int get(int field);//获取指定的日历字段对应的时间值
public static void main(String[] args) {
Calendar calen = Calendar.getInstance();
System.out.println("当前日期:" +calen);
calen.set(Calendar.YEAR, 2013);
System.out.println("修改后日期:"+calen);
System.out.println("calen.get(Calendar.MARCH) = "+calen.get(Calendar.MARCH));
String str = calen.get(Calendar.YEAR)+"年"+calen.get(Calendar.MONTH)+"月"
+calen.get(Calendar.DAY_OF_MONTH)+"日"+calen.get(Calendar.HOUR_OF_DAY)+"时"+calen.get(Calendar.SECOND)+"分"
+calen.get(Calendar.SECOND)+"秒";
System.out.println("获取格式化时间:"+str);
}

550

被折叠的 条评论
为什么被折叠?



