- 浏览: 16576 次
- 性别:
- 来自: 广州
最新评论
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); } }
发表评论
-
javase_22(TCP的理解)
2012-09-02 19:43 647TCP传输 Socket(客户端)和ServerSocket( ... -
javase_21(DUp的学习-->*)
2012-08-30 00:45 727Socket网络编程 网络协议 IP地址与端口号 本 ... -
javase_20(Awt初步认识)
2012-08-27 01:00 1029多线程的再度复习.class package com.jav ... -
javase_19(多线程)
2012-08-24 23:32 876进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次 ... -
javase_18(回顾与反射机制学习)
2012-08-20 11:58 462AM上午总结: package com.ja ... -
javase_17(IO的总结)
2012-08-20 11:55 1070所有的流在使用完毕时,都需要调用close方法进行关流,释放资 ... -
javase_16(其它流)
2012-08-20 11:52 911IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_16(其它流)
2012-08-20 11:38 0IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_15(File类的应用)
2012-08-19 00:07 902File类:用来将文件或者 ... -
javase_14(字节流)
2012-08-19 00:00 726字节流的抽象基类: InputStream(输入) ... -
javase_13(字符流)
2012-08-19 00:00 624IO(Input OutPut)流 IO流用来处理设备 ... -
javase_11(集合的理解)
2012-08-19 00:00 888集合类: 为什么使 ... -
javase_10(String类日常操作)
2012-08-18 09:40 842第一: package com.ja ... -
javase_09(面向对象总结)
2012-08-18 09:39 917Java的环境配置 day01 1. 环 ... -
javase_08(基础面试题)
2012-08-18 09:38 765面试题:请说说抽象类和接口的区别 抽象类,使用abstrac ... -
javase_07(继承与设计模式)
2012-08-18 09:36 646/* 子类对象的实 ... -
javase_06(面向对象)
2012-08-18 09:29 704/* 内部类: .在类中定义的类我们称之为内部类, ... -
javase_05(面向对象)
2012-08-16 11:25 0一.构造函数的定义与 ... -
javase_05(面向对象)
2012-08-16 11:22 829一.构造函数的定义与作用 1.函数的名次与类同名2.没有 ... -
javase_04(面向对象)
2012-08-16 11:21 559面向对象:一种编程思想,使用对象来描述生活中的事物:面向对象的 ...
相关推荐
这个编程资料包涵盖了JavaSE的学习资源,旨在帮助开发者掌握Java的基础知识、集合框架、IO流等关键概念。 首先,Java基础知识是学习JavaSE的起点。这包括了Java语法、数据类型、控制结构(如if语句、for循环、while...
`java.util`则包含了集合框架、日期时间处理、随机数生成等工具类。 2. **类(Classes)**:每个类都代表了一种特定的数据结构或功能,如`ArrayList`、`HashMap`等。类定义了属性(fields)和方法(methods),通过...
- **Java.util**:包含各种实用工具类,如日期时间、集合操作、事件模型等。 - **Java.nio**:非阻塞I/O,提供更高效的数据传输。 12. **JDBC**: - **数据库连接**:使用DriverManager、Connection、Statement...
int date, int hour, int minute, int second),通过这些构造方法,我们可以方便地创建不同精度的时间对象。GregorianCalendar类同样包含add()、after()、before()、get()、set()和toString()等常用方法,使操作...
4. **日期和时间API**:JavaSE 8彻底改革了日期和时间处理,引入了java.time包,包括LocalDate、LocalTime、LocalDateTime和ZonedDateTime等类,替代了旧有的Calendar和Date类,使日期和时间操作更加直观和灵活。...
`SimpleDateFormat`用于日期和字符串之间的转换,而`Calendar`类则提供了日期和时间的计算和操作。 Java中的集合框架包括`List`、`Set`和`Map`接口。`List`接口允许元素重复且保持插入顺序,常见的实现有`ArrayList...
最后,对于基本类型如`int`,Java提供了包装类`Integer`,它们在自动装箱和拆箱时相互转换,这是Java泛型和集合框架的重要组成部分。在处理大量数据时,需要考虑效率,通常原始类型比对应的包装类更快。
9. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashMap等,提供了一种高效管理对象的方式。 10. **IO流**:Java的IO流处理包括字符流和字节流,支持读写文件、网络通信等。 11. **多线程**:Java提供...
10. **新的日期时间API**:`java.time`包提供了新的日期时间API,如`LocalDate`、`LocalTime`、`LocalDateTime`等,替代了原来的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的日期时间处理功能。...
12. **JDBC 4.0**:JavaSE6_API引入了JDBC 4.0,增加了自动连接管理和改进的异常处理,使数据库操作更加简便。 13. **Scripting API**:`javax.script`包允许在Java应用中执行脚本语言,如JavaScript、Groovy等。 ...
在Java面试中,通常会涉及面向对象编程概念(如封装、继承、多态),集合框架(List、Set、Map接口及其实现类),异常处理,IO流,线程同步,JVM内存模型,设计模式,Spring框架等知识点。面试题可能包括编程题,也...
4. **并发集合**:Java并发包提供了一系列优化的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们在多线程环境下表现更优秀,减少了同步开销。 5. **原子变量**:`java.util.concurrent.atomic`包...
Java的基础类库提供了大量的核心功能,包括集合框架、IO流、网络编程、多线程、反射、日期时间等。在Java SE 6.0中,这些类库进行了优化和增强,使得开发更为便捷高效。 1. 集合框架:Java SE 6.0引入了泛型,增强...
5. **新的日期/时间API**:取代了原有的java.util.Date和Calendar,提供了java.time包,包含诸如LocalDate、LocalTime、LocalDateTime等新类,提供了更强大且易于使用的日期和时间操作。 6. **类型推断增强**:...
6. **集合框架**: JavaSE的集合框架如ArrayList、LinkedList、HashMap等,为处理大数据集提供了一种高效的方式来存储和操作数据。 7. **网络编程**: JavaSE的Socket编程接口,使得开发分布式大数据应用变得更加便捷...
JavaSE/docx JavaSE 是 Java 标准版,涵盖了 Java 基础知识点。下面是根据提供的文件信息,提炼出的知识点: 变量 * 变量的声明和赋值 * 变量的数据类型(基本数据类型和引用数据类型) * 变量的作用域和生命周期...
5. **Date和Time API更新**:Java 8对日期和时间API进行了彻底的改造,引入了`java.time`包,提供了`LocalDate`、`LocalTime`、`LocalDateTime`等新类,取代了过时的`java.util.Date`和`Calendar`,使得日期和时间...
`java.io`提供I/O流操作,`java.util`则包含了集合框架、日期时间、排序算法等。 2. **集合框架**:`java.util.ArrayList`、`LinkedList`、`HashSet`、`HashMap`等是常用的集合类,它们为存储和操作对象提供了强大...
6. **集合框架**: Java集合框架提供了一系列接口(如List、Set、Queue)和实现类(如ArrayList、HashSet、LinkedList),用于存储和操作对象。 7. **多线程编程**: Java内置了对多线程的支持,通过实现Runnable接口...