`
_kudy
  • 浏览: 15098 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javase_12(集合+时间对象)

阅读更多

 

Map集合


1.Map存储了一系列键值的映射关系
2.Map集合需要保证键的唯一性
3.可以通过键获取到值,反之则不能
4.Map集合存储元素使用put(key,valus)方法.
5.遍历Map集合的两种遍历方式
a)通过KeySet方法返回由键组成的集合,迭代集合里面的元素拿到所有的键再通过get方法根据键来获取值
b)通过entrySet方法返回键所映射的关系组成的集合,迭代该集合就拿到一个键值映射的关系,再通过getKey获取到键,再通过getValue()方法获取到值


HashMap
线程不安全,存储速度快,允许存放null键,null值
通过HashSet保持键的唯一性

Hashtable
线程安全,存储速度慢,不允许存放null键与null值

TreeMap
通过二叉树的原理保证了键的唯一性
对键进行了排序,排序原理与SetMap相同.
(如果想要使用这个方法,必须要冲构造方法里面重写Comparator 或者从对象所属的类继承Comparator实现这个接口)

Properties
Hashtable的子类,所以是线程安全的.
用于读写配置文件,一般配置项等号两边都是String,所以集合中的两个列保存的都是String类型的数据.
这个集合中只能存String,所以不能使用泛型.


/*JavaAPI总结:application programming interface应用程序编程接口 sun公司提供给我们用的程序
一、String、StringBuffer、StringBuilder
1、String类是字符串常量
2、String池:String s = "abc" 和String s = new String("abc")的区别
3、String类的常用方法:charAt、indexOf、toCharArray、substring、split、compareTo、equals
4、StringBuffer:字符串容器,长度可变,一般用于字符串的增减删的操作。reverse方法反向
String s = "abc"; s = s + "xxx";//String长度不可变,因为是常量
5、StringBuilder线程不安全,StringBuffer线程安全

二、集合类
|-Iterable:实现增强for循环
|--Collection:单列,按照一种或多种规则来存储一系列元素
|---List:有序,允许有重复元素
|----AbstractList:抽象类,实现了iterator方法。
|-----ArrayList:数组实现,查找块,增删慢
|-----Vector:和ArrayList一样,只是线程安全
|-----LinkedList:链表实现,查找慢,增删块
|---Set:无序,不允许有重复元素
|----HashSet:通过哈希算法保证元素不重复,对象要正确重写equals和hashCode方法
|----HashTable:同上,但是线程安全
|----TreeSet:通过树状结构保证元素不重复,两种方式
1、按照元素的自然顺序进行排序,前提是元素具备比较功能,实现了Comparable接口的compareTo方法
2、在构造TreeSet实例时,传入一个比较器,实现Comparator接口的compare方法

|-Map:保存的是键值对应关系,其中键不允许有重复,可以通过keySet方法拿到一个包含所有键的Set
再调用get(key)方法通过键拿到value
|--HashMap:通过HashSet的原理保证键不重复。
|--TreeMap:通过TreeSet的原理保证键不重复
|--Properties:用于读取配置文件,不需要声明泛型,因为键和值都只能为String类型。
list方法将集合中的配置项输出到一个打印流
load方法将一个输入流中的配置项存到集合中
Jdk1.5新特性泛型,减少集合存元素时错误发生的几率。
Jdk1.5出现Iterable,为了实现增强for循环 for(元素类型 变量:集合或数组)

工具类:
Collections:集合工具类,sort、binarySearch、reverse
Arrays:数组工具类,sort。。。。


三、包装类
1、Integer x = 0;x = x + 1; 装箱-拆箱-装箱(jdk1.5)
2、Interger.parseInt(String)将字符串转为int型

四、System类
1、System类的常用方法:gc()垃圾回收、exit(0)终止程序、currentTimeMillis()获得自1970年1月1日零时
以来的毫秒数、getProperty方法获得系统属性。
2、两个静态成员变量:in和out
in:标准输入流,InputStreamReader类型
out:标准打印流,PrintStream类型

五、Runtime类
表示运行时,exec方法,在后台新开启一个窗口运行命令,是当前窗口的子窗口,继承所有窗口属性

六、日期对象
1、Date:大部分方法已过时,用new Date()创建日期对象表示当前时间
2、DateFormat:将日期格式化,抽象类
DateFormat df = DateFormat.getInstance(); String dateStr = df.format(new Date);
3、Calendar对象:
Calendar c = Calendar.getInstance();
可以将类中定义的常量当做参数传入get和set方法来获得和设置时间。
add方法,增加时间值,具体增加哪一项,就看传入的常量,调用完此方法,时间对象就被改变了。
*/

面试题目总结:

一、请说说ArrayList、Vector和LinkedList的区别
这三者都是单列集合Collection下List集合的实现类,所以他们的共同点,元素有序,允许重复元素
不同点:
ArrayList和Vector底层都是数组实现,这样的实现注定查找快、增删慢
ArrayList和Vector的区别在于线程安全问题,Vector支持线程同步,是线程访问安全的,而ArrayList线程不安全
LinkedList底层是链表结构,查找元素慢、增删元素速度快,线程不安全。

二、请说说HashSet原理,并写程序证明
HashSet在存元素时,会调用对象的hashCode方法计算出存储位置,然后和该位置上所有的元素进行equals比较,
如果该位置没有其他元素或者比较的结果都为false就存进去,否则就不存。
这样的原理注定了元素是按照哈希值来找存储位置,所有无序,而且可以保证无重复元素
我们在往HashSet集合存储元素时,对象应该正确重写Object类的hashCode和equals方法
正因为这样的原理,HashSet集合是非常高效的。
比如,要查找集合中是否包含某个对象,首先计算对象的hashCode,折算出位置号,到该位置上去找就可以了,而不用和所有的元素都比较一遍

三、Collection和Collections的区别
两者没有任何关系
Collection是单列集合的父接口,JDK1.5中定义了Iterable接口作为Collection父类,为了实现增强for循环
Collections是工具类,提供了关于集合的常用操作,例如,排序、二分法查找、反转元素等

 

Collections 的应用:
 
 1.
 package com.javami.kudyMap;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 public class ColletionsTest {
     public static void main(String[]args)
     {
         /*
          * Collections工具类:提供关于集合的常用操作.
          */
         ArrayList<String> al = new ArrayList<String>();
         al.add("ab");
         al.add("aadc");
         al.add("aaa");
         al.add("hgdfakjg");
         al.add("xhyns");
         al.add("yyiouop");
         al.add("qq");
         al.add("zdff");
         
         /*
         for(String s : al)
             System.out.println(s+" ");
         */
         
         /*Collections.sort(al);  //list是一个接口  父类型的应用可以指向子类型的对象..
         for(String s : al)
             System.out.println(s+" ");*/
         Collections.sort(al, new StringComparator());
         /*
          * 第一种方法 : 通过比较器来对比排序   可以在构造方法里面.
          * 或者在对象里面实现这个比较器.当new 这个实现接口.它会自动调用比较器的方法进行比较
         */
         System.out.println("通过StringComparator()方法已经排序好-----");
         for(String s : al)
             System.out.print(s+" ");
         /*
          * 使用了API里面的方法!
         //binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 
         int pos = Collections.binarySearch(al,"aaa",new StringComparator());
         System.out.println(pos);//因为我们需要通过比较才可以!
         */
         int pos = MyCollections.binarySearch(al,"dasdas",new StringComparator());
         System.out.println(pos);
     }
     
 }
 
 /*
  * 比较器: 先比较  长短,再比较顺序
  */
 class StringComparator implements Comparator<String>
 {
 
     @Override
     public int compare(String s1, String s2)
     {
         //首先比较长度,再按照字典顺序
         int num = s1.length()- s2.length();
         if(num !=0)
             return num;
         return s1.compareTo(s2);
         
     }
     
 }
 
 //实现一个二分查找
 class MyCollections
 {
     private MyCollections(){}//私有化
     public static<T> int binarySearch(List<T> l,T key,Comparator<T> com)
     {
         int min = 0;
         int max = l.size()-1;
         int mid = 0;
         while(max >=min)
         {
             mid = (min+max) / 2;
             //判断比较器里面有没有!
             if(com.compare(key,l.get(mid))>0)//找到集合位置的值
                 min = mid+1;
             else if(com.compare(key, l.get(mid))<0)
                 max = mid-1;
             else
                 return mid;
         }
         
         //判断mid位置的元素和key的大小
         if(com.compare(key, l.get(mid))>0)
             return -mid-2;
         return -mid-1;
             
     }
 }
 
 2.必须要通过比较器比较才能实现二分查找:
 
 package com.javami.kudyAPI;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 
 public class Test {
     public static void main(String[]args)
     {
         ArrayList<String> al = new ArrayList<String>();
         al.add("as");
         al.add("scx");
         al.add("dsad");
         al.add("hellsda");
         al.add("dsazxc");
         al.add("dascxxc");
         //在通过二分查找之前我们要经过排序'
         System.out.println("还没有排序之前");
         for(String s : al)
             System.out.print(s+" ");
         
         
         //第二部 : 当你调用二分查找之后.会调用比较器进行比较.是经过排序后的才可以进行二分查找
         //比较器一定要传过来
         int num = Collections.binarySearch(al, "dsaas",new Comparator<String>(){
 
             @Override
             public int compare(String s1, String s2) {
                 int num = s1.length() - s2.length();//比较长度
                 if(num != 0)
                     return num;
                 return s1.compareTo(s2); //按字典顺序排
             }
             
         });
         System.out.println(num+1);
     }
 }
 
 
 日期的应用:
 
 package com.javami.kudyAPI;
 import java.util.Calendar;
 public class CalendarTest {
 
     /**
      * @param args
      */
 
     public static void main(String[] args)
     {
         Calendar calendar = Calendar.getInstance();
         printCalendar(calendar);
         int nums = getDayNum(2012);
         System.out.println(nums);
         
         //----------------
         Calendar startDay = Calendar.getInstance();//获取当前的日历
         Calendar finishDay = getFinishDay(startDay);
         int num = finishDay.get(Calendar.DAY_OF_YEAR) - calendar.get(Calendar.DAY_OF_YEAR);
         System.out.println(num+"天数");
     }
     
     //计算出某年的2月份有多少天
     public static int getDayNum(int year)
     {
         //1.获取一个日历
         Calendar calendar = Calendar.getInstance();
         
         /*
          * set(int year, int month, int date) 
           设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
          */
         calendar.set(year,2,1); //2月份其实就是中国的三月
         //日历字段  DAY_OF_YEAR获取到年中的月份  , -1  其实就是2月份
         calendar.add(Calendar.DAY_OF_YEAR,-1);
         return calendar.get(Calendar.DAY_OF_MONTH); //获取到二月份的天数
     }
     
     //一个项目做100天,周末休息,五一和十一各休息一天,今天开始做,哪天完工
     //一个项目做100天,周末休息,五一和十一各休息一天,今天开始做,哪天完工
     public static Calendar getFinishDay(Calendar c) {
         for(int i=0; i<100; i++) {
             
             //如果是星期六或者星期天(get 和 set 的字段数字,指示一个星期中的某天。)
             if(c.get(Calendar.DAY_OF_WEEK)==1||c.get(Calendar.DAY_OF_WEEK)==7)
                 i--;
             //(get 和 set 的字段数字,指示一个月中的某天。)
             else if(c.get(c.DAY_OF_MONTH)==1&&(c.get(c.MONTH)==4||c.get(c.MONTH)==9))
                 i--;
             c.add(Calendar.DAY_OF_YEAR, 1);
         }
         return c;
     }
     //代表是一个时间
     public static void printCalendar(Calendar calendar)
     {
         int year = calendar.get(calendar.YEAR); //年
         int month = calendar.get(calendar.MONTH); //月
         int day = calendar.get(calendar.WEEK_OF_MONTH);//日
         int week = calendar.get(calendar.DAY_OF_WEEK);//星期
         int hour = calendar.get(calendar.HOUR_OF_DAY); //时间
         int minute = calendar.get(calendar.MINUTE);//分
             
         String StringWeek = null;
         switch(week)
         {
         
             case 1:
                     StringWeek = "星期天";
                     break;
             case 2:
                     StringWeek = "星期一";
                     break;
             case 3:
                     StringWeek = "星期二";
                     break;
             case 4:
                     StringWeek = "星期三";
                     break;
             case 5:
                     StringWeek = "星期四";
                     break;
             case 6:
                     StringWeek = "星期五";
                     break;
             case 7:
                     StringWeek = "星期六";
                     break;
         }
         //并接成字符串
         String str = ""+year+"-"+(month+1)+"-"+day+"-"+week+"-"+hour+"-"+minute;
         System.out.println(str);
     }
 
 
 }

 

分享到:
评论

相关推荐

    新版java教程 全套javase零基础到高级视频教程小白自学编程下载地址

    ·讲解接口、继承、抽象等核心面向对象编程OOP思想 ,玩转java异常Exception体系和自定义异常 ,快速掌握常见数据结构和Collection集合框架体系基础 中级知识点 ,重点讲解Collection:集合框架体系List/Set/Map多种 ...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    本书涵盖了JavaSE开发环境配置、程序设计基础、面向对象相关技术、常用API、UML基础知识。在章节中穿插了上机习题,并提供了答案,用于对该章内容进行阶段性总结演练。 作者长期从事教学工作,积累了丰富的经验,其...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX 318 12.1.2 JMX基本概念 318 12.1.3 JMX管理应用开发 323 12.2 练习 325 12.2.1 建立JMX开发环境 325 12.2.2 创建拼词游戏程序 326 12.2.3 ...

    Java SE实践教程 pdf格式电子书 下载(一) 更新

    第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX 318 12.1.2 JMX基本概念 318 12.1.3 JMX管理应用开发 323 12.2 练习 325 12.2.1 建立JMX开发环境 325 12.2.2 创建拼词游戏程序 326 12.2.3 ...

    Java SE实践教程 源代码 下载

    第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX 318 12.1.2 JMX基本概念 318 12.1.3 JMX管理应用开发 323 12.2 练习 325 12.2.1 建立JMX开发环境 325 12.2.2 创建拼词游戏程序 326 12.2.3 ...

    超市会员管理系统(java SE)

    开卡日期:日期时间操作(Date类、SimpleDateFormat类) 将注册成功的会员添加进集合(ArrayList add()) B:修改密码 验证会员是否存在 会员对象密码属性重新赋值 C:积分累计 验证会员是否存在 ...

    leetcode分类-backend-learning:Kerno后端方向学习仓库

    JavaSe 奠定基础 基础语法(常用数据类型与包装类,访问与非访问修饰符,跳出循环,类与方法的声明) 基本语法规则(标识符,修饰符,关键字) 数据类型与变量 修饰符与运算符 流程控制 数组 类与方法 泛型 常量与...

    java基础案例与开发详解案例源码全

    12.5.2 使用集合工具类同步化集合类对象324 12.5.3 使用JDK5.0后提供的并发集合类324 12.6 用Timer类调度任务325 12.7 本章练习326 第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件...

    jase总结java基础

    javase基础(1,java笔记(安装,java介绍,8大基本类型,语法,面向对象),2STRING时间工具类,3异常,4集合,5io流,6线程,7网络编程,8xml,9dom4j,附带一些简单的事列)

    JAVA核心技术卷一卷二(中文)之part2分卷

    囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用...

    JAVA核心技术卷一卷二(中文)之part4分卷

    囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用...

    JAVA核心技术卷一卷二(中文)之part3分卷

    囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用...

    JAVA核心技术卷一卷二(中文)之part1分卷

    囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用...

    数据库课程设计——图书管理系统.doc

    1.2.2 java简介 java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的...

    Java学习笔记-个人整理的

    {12}Oracle数据库}{151}{chapter.12} {12.1}术语}{151}{section.12.1} {12.2}登录数据库}{151}{section.12.2} {12.3}创建表格}{152}{section.12.3} {12.4}关于null值}{154}{section.12.4} {12.5}操作符与实例}...

    Java经典入门教程pdf完整版

    Javase50发布 2006年12月 Java se60发布 3:Java特点 简单地说,Java具有如下特点:简单的、面向对象、平台无关、多线程、分布式、安全、 晑性能、可靠的、解释型、自动垃圾回收等特点。 这里只解释一下平台无关和...

Global site tag (gtag.js) - Google Analytics