黑马程序员--集合二

来源:互联网 发布: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);    }

这里写图片描述

0 0
原创粉丝点击