黑马程序员--集合二
来源:互联网 发布:java中接口作为参数 编辑:程序博客网 时间:2024/06/07 10:19
——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); }
- 黑马程序员---集合二
- 黑马程序员--集合二
- 【黑马程序员】集合二
- 黑马程序员-----集合(二)
- 黑马程序员 集合(二)
- 黑马程序员 集合框架二
- 黑马程序员---集合(二)
- 黑马程序员 集合(二)
- 黑马程序员--集合(二)
- 黑马程序员--集合总结(二)
- 黑马程序员_Java集合总结(二)
- 黑马程序员_集合框架(二)
- 黑马程序员----集合类(二)
- 黑马程序员 集合框架(二)
- 黑马程序员-----集合框架笔记二
- 黑马程序员:JAVA集合框架知识点二
- 黑马程序员 java集合框架笔记(二)
- 黑马程序员 java集合笔记(二)
- 【线性代数公开课MIT Linear Algebra】 第十八课 行列式的性质
- MyBatis的标签汇总
- IOS面试题 综合版
- i2c--2.6.34文档:如何枚举产生i2c_client
- java-文件上传和下载
- 黑马程序员--集合二
- Delegate的使用
- 如何获取当前屏幕状态?左横屏 右横屏 竖屏
- AutoLayout(自动布局)入门
- 平行宇宙的追逐--异步FIFO控制器的设计。
- OTSU算法
- 08-图7 公路村村通
- SSLServerSocket、SSLSocket简单例子
- rbd相关命令