Java基础学习总结
Java基础学习总结
1、 Java简介(官网:www.oracle.com)
Java是一种电脑编程语言,拥有跨平台、面向对象、泛型编程的特性。 任职于太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,太阳公司放弃了该项计划。随着1990年代互联网的发展,太阳公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指針,改以引用取代,同时移除原C++与原来运算符重载,也移除多重继承特性,改用接口取代,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳公司对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”
Java不同于一般的编译语言和解释语言。它首先将源代码编译成字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。
与传统型态不同太阳公司在推出Java时就将其作为开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是太阳公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的.NET平台以及模仿Java的C#语言。后来太阳公司被甲骨文公司并购,Java也随之成为甲骨文公司的产品。
2、 JDK、JRE
Java Development Kit (JDK)是Sun公司针对Java开发人员发布的免费软件开发工具包(SDK,Software development kit)。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。由于JDK的一部分特性采用商业许可证,而非开源[2]。因此,2006年Sun公司宣布将发布基于GPL协议的开源JDK,使JDK成为自由软件。在去掉了少量闭源特性之后,Sun公司最终促成了GPL协议的OpenJDK的发布。
JDK包含了一批用于Java开发的组件,其中包括:
· javac –编译器,将后缀名为.java的源代码编译成后缀名为.class的字节码
· java – 运行工具,运行.class的字节码
· jar – 打包工具,将相关的类文件打包成一个文件
· javadoc – 文档生成器,从源码注释中提取文档,注释需符合规范
· jdb debugger,调试工具
· jps – 显示当前java程序运行的进程状态
· javap – 反编译程序
· appletviewer – 运行和调试applet程序的工具,不需要使用浏览器
· javah – 从Java类生成C头文件和C源文件。这些文件提供了连接胶合,使 Java 和 C 代码可进行交互。[3]
· javaws – 运行JNLP程序
· extcheck – 一个检测jar包冲突的工具
· apt – 注释处理工具[4]
· jhat – java堆分析工具
· jstack – 栈跟踪程序
· jstat – JVM检测统计工具
· jstatd – jstat守护进程
· jinfo – 获取正在运行或崩溃的java程序配置信息
· jmap – 获取java进程内存映射信息
· idlj – IDL-to-Java编译器. 将IDL语言转化为java文件[5]
· policytool – 一个GUI的策略文件创建和管理工具
JDK中还包括完整的JRE(Java Runtime Environment),Java运行环境,也被称为private runtime。包括了用于产品环境的各种库类,如基础类库rt.jar,以及给开发人员使用的补充库,如国际化与本地化的类库、IDL库等等。
JDK中还包括各种样例程序,用以展示Java API中的各部分。
Java执行环境(JavaRuntime Environment,简称JRE)是一个软件,由Sun所研发,JRE可以让电脑系统执行Java应用程式(JavaApplication)。
JRE的内部有一个Java虚拟机器(Java VirtualMachine,JVM)以及一些标准的类别函数库(Class Library)。
3、 Java入门程序
package org.zhanghua.javase.hw; /** * Java 入门程序 * * @author ZhangHua * */ public class HelloWorld { public static void main(String[] args) { // 打印出一句Hello World System.out.println("Hello World!"); } } |
4、 基本数据类型
4类8种
/**
* 8种基本数据类型
*/
private byte b = 'a'; // 1字节 取值范围:Byte.MAX_VALUE 和 Byte.MIN_VALUE
private short s = 1; // 2字节 取值范围:Short.MAX_VALUE 和 Short.MIN_VALUE
private int i = 123; // 4 取值范围:Integer.MAX_VALUE 和 Integer.MIN_VALUE
private long l = 1234567890;// 8 取值范围:Integer.MAX_VALUE 和 Integer.MIN_VALUE
private char c = '中'; // 3字节 ...
private float f = 3.14f; // 4 ...
private double d = 3.14; // 8 ...
private boolean e = true;
/**
* 8种对应的封装类型
*/
private Byte bb = 'a';
private Short ss = 1;
private Integer ii = 1;
private Long ll = 1L;
private Character cc = '中';
private Float ff = 3.14f;
private Double dd = 3.14;
private Boolean bl = false;
/**
* String 是最常用的数据类型,但不属于基本数据类型
*/
private String str = "str";
按功能划分:基本数据类型和引用数据类型。
基本数据类型:整数类型(byte,short,int,long)、浮点型(float,double)、字符型(char)、布尔型(boolean)
引用数据类型:类(class)、接口、数组
注意:B是指byte,byte是字节的意思,是存储空间的基本计量单位,bit 是位的意思,也就是二进制的长度的意思,例如‘10011001’ 是一个8位(bit)的二进制数,bit同时是网速的基本计量单位bps中的bps,意思就是每秒传输多少位数。
二进制是计算机内部使用的基本表达语言,bit是计算机中的最小数据单位(1byte=8bit),说明1byte在计算机存储一个8位的二进制数,这是固定的
数据类型转换:
类型小--->类型大的转换:自动转换 byte,short,char->int->long->float-> double
类型大--->类型小的转换:加强制转换 比如:long ll = 1234; int ii = (int) ll;
运算时:byte,short,char 当int类型处理,整数编译器默认当int类型,小数默认当double
递归总结:
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
/** * 递归 顾名思义:就是对自己调用 * 求N! 求阶乘 * * @param args */ public int testRecursion1(int i) { if (i == 1) { return 1; } else { // i * testRecursion(i - 1) // 对自己调用,假如i=5-->test(4)-->test(3)-->test(2)-->test(1),然后再返回 return i * testRecursion1(i - 1); // 5*testRecursion(4)=5*4*testRecursion(3)=5*4*3*testRecursion(2)=5*4*3*2*1=120 } } |
5、 面向对象总结
"一切皆为对象 " 一个系统,可以分为N个小应用,一个小应用中可以分为N个类(对象)。
类与类之间的关系:关联、继承、实现、聚合(聚集(松耦)、组合(密不可分))、多态
面向对象与面向过程的区别?
1、可复用性、可扩展性、可维护性等
2、复用层次不同的,还有面向组件的编程,都是追求代码复用,这也是多年来编程发展苦苦追求的境界
对象与类的区别?
类是描述同一类型的对象的一个抽象,对象可以看成该类的一个具体实例。例如:学生,是一个类(是一类事物描述和抽象), 学生A ,是一个对象(某一个具体的实例)
opp 考虑问题方法:
1、考虑应该有哪些个类,哪些个对象
2、考虑这些个类,这些个对象应该具有哪些个方法、成员变量 (注意:合适的方法定义在合适的类中)
3、考虑这些个类这些对象关系
总结:重载,是指本类中的;重写,是指子类对父类的方法进行重写
重载(overload)
1、方法名相同,参数个数不同
2、方法名相同,参数个数相同,参数类型不同
3、方法名相同,参数个数相同,参数类型不同,参数顺序不同
4、方法名相同,返回值不同(但是同时参数个数或者参数类型也不同)
5、对访问权限 (private、public、protected、friendly)和方法抛出异常没有限制
重写(override)
1、方法名、参数个数、参数类型、返回值、抛出的异常与父类必须一样
2、对访问权限只能比父类大不能小(例如:父类是protected,子类只能是protected或public)
接口与抽象类的区别?
1、 声明:抽象类使用关键字:abstract,接口则使用interface
2、 成员变量:抽象类可以有普通的成员变量,而接口中的成员变量只能是public static final类型的,就算定义声明的时候不是publicstatic final 类型的,默认也是public staticfinal 类型的
3、 构造方法:抽象类可以有构造方法,而接口没有
4、 方法:抽象类可以有(普通的、抽象的,静态的)方法,而接口只能是public abstract 类型的,就算定义的时候不是publicabstract类型的,默认也是public abstract 类型的
5、 一个类可以实现多个接口,但只能继承一个抽象类
6、 接口本身也可以实现其他接口
Exception/runtimeException/error之间的区别?
三者都是继承java.lang.Throwable类,java.lang.Throwable有2个子类Error和Exception,Exception有RuntimeException
#1 Exception 是所有异常类的父类,是一种程序设计/实现的问题,如果程序运行正常则不会产生异常,设计良好的程序应该在异常发生时,提供处理这些错误的方法,使得程序因为异常的发生而阻断或产生不可预见的结果。比如:除0溢出,数组小标越界,读取文件不存在等等。
#2 RuntimeException 表示运行时异常,RuntimeException(是经常出现的错误可以不catch),该类异常是不受程序控制的
#3Error分为运行时错误和编译时错误,是系统错误,是不可恢复的,也是程序本身无法处理的,如果是编译时的错误,只能通过修改代码通过编译才行,系统内存溢出,服务器崩溃等
6、 数组的总结
数组可以看成是多个相同数据类型的数据组合,对这些数据统一管理,数组属于引用类型,数组也可以看出是对象,数组中的每个元素相当于对该对象的成员变量。数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
数组的声明:int[] array; int array[]; 推荐使用int[] array;
数组的创建:int[] array=new int[5];使用new关键字创建。
数组的初始化:分为静态初始化和动态初始化
静态初始化:int[] array={1,3,5,7,9}
动态初始化:
for(int i=0;i<5;i++){ Array[i]=i; } |
二维数组
二维数组,可以看成以数组为元素的数组,多维数组,可以看成以数组为数组元素的数组的元素的数组
// 声明为4行5列的二维数组(动态声明) int[][] arrays = new int[4][5]; // 赋值 for (int i = 0; i < arrays.length; i++) { int[] inner = arrays[i]; for (int j = 0; j < inner.length; j++) { arrays[i][j] = i + j; } } // 读取 System.out.println("Two-dimensional:"); for (int i = 0; i < arrays.length; i++) { int[] inner = arrays[i]; for (int j = 0; j < inner.length; j++) { int data = arrays[i][j]; System.out.print(" " + data); } System.out.println(); } |
数组的拷贝
/** * 数组拷贝 * * @param destArray * 目标数组 * @param srcArray * 源数组 * @return int[] destArray 目标数组 */ public int[] arrayCopy(int[] destArray,int[] srcArray) { if (destArray.length < srcArray.length) { System.out.println("Error, destArray.length < srcArray.length"); return destArray; } System.arraycopy(srcArray, 0, destArray, 0, srcArray.length); return destArray; } |
数组的排序(冒泡排序、选择排序、快速排序)
/** * 冒泡排序 * * @param arrays * 要排序的数组 */ public void bubbingSort(int[] arrays) { int swap = 0; for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays.length - i - 1; j++) { if (arrays[j] > arrays[j + 1]) { swap = arrays[j]; arrays[j] = arrays[j + 1]; arrays[j + 1] = swap; } } } } |
/** * 选择排序 * * @param arrays * 要排序的数组 */ public void selectSort(int[] arrays) { int index = 0; int swap = 0; for (int i = 1; i < arrays.length; i++) { index = 0; for (int j = 1; j <= arrays.length - i; j++) { if (arrays[j] > arrays[index]) { index = j; } } // 交换在位置arrays.length-i和index(最大值)两个 swap = arrays[arrays.length - i]; arrays[arrays.length - i] = arrays[index]; arrays[index] = swap; } } |
/** * 快速排序 * * @param arrays * 要排序的数组 * @param start * 起始位置 * @param end * 结束位置 */ public void quickSort(int[] arrays,int start, int end) { int startIndex, endIndex, value; if (start < end) { // 这个条件是否结束循环 startIndex = start; endIndex = end; value = arrays[startIndex]; while (startIndex < endIndex) { while (startIndex < endIndex && arrays[endIndex] > value) { // 从右向左找第一个小于value的数 endIndex--; } if (startIndex < endIndex) { arrays[startIndex] = arrays[endIndex]; startIndex++; } while (startIndex < endIndex && arrays[startIndex] < value) { // 从左向右找第一个大于value的数 startIndex++; } if (startIndex < endIndex) { arrays[endIndex] = arrays[startIndex]; endIndex--; } } arrays[startIndex] = value; quickSort(arrays, start, startIndex - 1); quickSort(arrays, startIndex + 1, end); } } |
数组的查找(二分查找法)
/** * 二分法 * * @param arrays * 要查找的数组 * @param value * 要查找的值 * @return 返回查找值的下标 */ public int binarySearch(int[] arrays,int value) { int startIndex = 0; int endIndex = arrays.length - 1; int midIndex = (startIndex + endIndex) / 2; if (0 == arrays.length) { return -1; } while (startIndex <= endIndex) { if (value == arrays[midIndex]) { return midIndex; } if (value > arrays[midIndex]) { startIndex = midIndex + 1; } if (value < arrays[midIndex]) { endIndex = midIndex - 1; } midIndex = (startIndex + endIndex) / 2; } return -1; } |
7、 集合的总结
集合顾名思义,集合保存对象的引用,不产生新的对象(存放对象的对象)
Collection
├ List (可以重复)
│ ├LinkedList
│ ├ArrayList
│ └Vector
│ └Stack
│
└ Set (不重复)
├TreeSet有序
└HashSet无序
└LinkedHashSet
Map
├ Hashtable
├ HashMap
└ TreeMap
Collection 如下是Collection的方法,List,Set要实现Collection接口,就要实现如下的方法(同时这些方法也是集合的共同所具有的方法,其中…表示常用的方法)
boolean |
||
boolean |
addAll(Collection<? extendsE> c) |
|
void |
clear() |
|
boolean |
||
boolean |
containsAll(Collection<?> c) |
|
boolean |
||
int |
hashCode() |
|
boolean |
isEmpty() |
|
iterator() |
||
boolean |
||
boolean |
removeAll(Collection<?> c) |
|
boolean |
retainAll(Collection<?> c) |
|
int |
size() |
|
Object[] |
toArray() |
|
|
toArray(T[] a) |
List<E>可以添加重复(值对象之间的equals相等)元素的集合
以下是List接口的方法(其中…表示List接口特有的方法)
boolean |
||
void |
||
boolean |
addAll(Collection<? extendsE> c) |
|
boolean |
addAll(int index, Collection<? extendsE> c) |
|
void |
clear() |
|
boolean |
||
boolean |
containsAll(Collection<?> c) |
|
boolean |
||
get(int index) |
||
int |
hashCode() |
|
int |
||
boolean |
isEmpty() |
|
iterator() |
||
int |
lastIndexOf(Object o) |
|
listIterator() |
||
listIterator(int index) |
||
remove(int index) |
||
boolean |
||
boolean |
removeAll(Collection<?> c) |
|
boolean |
retainAll(Collection<?> c) |
|
int |
size() |
|
subList(int fromIndex, int toIndex) |
||
Object[] |
toArray() |
|
|
toArray(T[] a) |
ArrayList 是大小可变,可以添加重复(值对象之间的equals相等)元素的集合,特点:查询速度快。
类 ArrayList<E>
java.util.AbstractCollection<E>
java.util.ArrayList<E>
以下是ArrayList的实现方法,其中…表示ArrayList特有的方法
boolean |
||
void |
||
boolean |
addAll(Collection<? extendsE> c) |
|
boolean |
addAll(int index, Collection<? extendsE> c) |
|
void |
clear() |
|
clone() |
||
boolean |
||
void |
ensureCapacity(int minCapacity) |
|
get(int index) |
||
int |
||
boolean |
isEmpty() |
|
int |
lastIndexOf(Object o) |
|
remove(int index) |
||
boolean |
||
protected void |
removeRange(int fromIndex, int toIndex) |
|
int |
size() |
|
Object[] |
toArray() |
|
|
toArray(T[] a) |
|
void |
trimToSize() |
实例演示:
// ArrayList底层是以数组为实现 // 注意List<T> T 只能是引用类型的,不能是基本数据类型 List<Integer> list = new ArrayList<Integer>(); Random random = new Random(); // 初始化 for (int i = 0; i < 10; i++) { list.add(random.nextInt(100)); } // add list.add(100); System.out.println("List.get(1)=" + list.get(1)); // remove list.remove("100"); // list.isEmpty() 判断集合是否为空,为空返回TRUE,反之返回FALSE System.out.println("List is empty:" + list.isEmpty()); // 打印 System.out.println("ArrayList:"); for (Integer integer : list) { System.out.print(integer + " "); } System.out.println(); // 集合大小 System.out.println("ArrayList size:"); System.out.println(list.size()); |
LinkedList底层是以链表结构实现的,线程不安全,对元素的增删速度快
类 LinkedList<E>
java.util.AbstractCollection<E>
java.util.AbstractSequentialList<E>
java.util.LinkedList<E>
以下是LinkedList的实现方法,其中…表示LinkedList特有的方法
boolean |
||
void |
||
boolean |
addAll(Collection<? extendsE> c) |
|
boolean |
addAll(int index, Collection<? extendsE> c) |
|
void |
||
void |
||
void |
clear() |
|
clone() |
||
boolean |
||
descendingIterator() |
||
element() |
||
get(int index) |
||
getFirst() |
||
getLast() |
||
int |
||
int |
lastIndexOf(Object o) |
|
listIterator(int index) |
||
boolean |
||
boolean |
offerFirst(E e) |
|
boolean |
||
peek() |
||
peekFirst() |
||
peekLast() |
||
poll() |
||
pollFirst() |
||
pollLast() |
||
pop() |
||
void |
||
remove() |
||
remove(int index) |
||
boolean |
||
removeFirst() |
||
boolean |
removeFirstOccurrence(Object o) |
|
removeLast() |
||
boolean |
removeLastOccurrence(Object o) |
|
int |
size() |
|
Object[] |
toArray() |
|
|
toArray(T[] a) |
LinkedList<String> linkedList = new LinkedList<String>(); linkedList.add("B"); linkedList.add("C"); linkedList.add("D"); linkedList.add("E"); // 添加到最后 linkedList.addLast("Z"); // 添加到最前面 linkedList.addFirst("A"); // 打印 System.out.println(linkedList); // 移除”C“ linkedList.remove("C"); // 移除下标为1的元素 linkedList.remove(1); // 添加到下标为1值为"A1" linkedList.add(1, "A1"); // 获取下标为1的值 linkedList.get(1); // 重新设置下标为1的值 linkedList.set(1, "A2"); // 打印 System.out.println(linkedList); |
Stack就如同子弹夹的原理(先进后出)
类 Stack<E>
java.util.AbstractCollection<E>
java.util.Stack<E>
boolean |
empty() |
peek() |
|
pop() |
|
int |
Stack<String> stack = new Stack<String>(); stack.push("One"); stack.push("Two"); stack.push("Three"); stack.push("Four"); System.out.println(stack); // 查看堆栈顶部的对象,但不从堆栈中移除它。 System.out.println(stack.peek()); // 移除堆栈顶部的对象,并作为此函数的值返回该对象。 System.out.println(stack.pop()); System.out.println(stack.peek()); while (!stack.isEmpty()) { // 出栈后,stack中的元素就移除了 System.out.println(stack.pop()); } // 查看堆栈中的元素 System.out.println(stack); |
Set<E>不可以添加重复元素的无序的集合,最多可包含一个Null元素.
boolean |
||
boolean |
addAll(Collection<? extendsE> c) |
|
void |
clear() |
|
boolean |
||
boolean |
containsAll(Collection<?> c) |
|
boolean |
||
int |
hashCode() |
|
boolean |
isEmpty() |
|
iterator() |
||
boolean |
||
boolean |
removeAll(Collection<?> c) |
|
boolean |
retainAll(Collection<?> c) |
|
int |
size() |
|
Object[] |
toArray() |
|
|
toArray(T[] a) |
HashSet<E>不可以添加重复元素的无序的集合,由哈希表(实际上是一个 HashMap 实例)支持
类 HashSet<E>
java.util.AbstractCollection<E>
java.util.HashSet<E>
boolean |
|
void |
clear() |
clone() |
|
boolean |
|
boolean |
isEmpty() |
iterator() |
|
boolean |
|
int |
size() |
public void hashSet() { Set<String> strings1 = new HashSet<String>(); strings1.add("a"); strings1.add("b"); strings1.add("c"); strings1.add("d"); strings1.add("a"); System.out.println("strings1 init:" + strings1); Set<String> strings2 = new HashSet<String>(); strings2.add("c"); strings2.add("d"); strings2.add("a"); strings2.add("e"); System.out.println("strings2 init:" + strings2); // 去strings1与strings2的交集 strings1.retainAll(strings2); System.out.println("strings1 and strings2 retain:" + strings1); // 迭代 Iterator<String> iterator = strings1.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } } |
LinkedHashSet 是set中有序的,哈希表和链接列表实现
类 LinkedHashSet<E>
java.util.AbstractCollection<E>
java.util.LinkedHashSet<E>
Set<String> linkedHashSet = new LinkedHashSet<String>(); linkedHashSet.add("a"); linkedHashSet.add("b"); linkedHashSet.add("c"); linkedHashSet.add("d"); // 如果要实现同步 linkedHashSet = Collections .synchronizedSet(new LinkedHashSet<String>()); linkedHashSet.add("e"); Iterator<String> iterator = linkedHashSet.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next() + " "); } |
TreeSet
类 TreeSet<E>
java.util.AbstractCollection<E>
java.util.TreeSet<E>
boolean |
|
boolean |
addAll(Collection<? extendsE> c) |
void |
clear() |
clone() |
|
Comparator<? super E> |
comparator() |
boolean |
|
descendingIterator() |
|
descendingSet() |
|
first() |
|
headSet(E toElement, boolean inclusive) |
|
boolean |
isEmpty() |
iterator() |
|
last() |
|
pollFirst() |
|
pollLast() |
|
boolean |
|
int |
size() |
subSet(E fromElement, boolean fromInclusive,E toElement, boolean toInclusive) |
|
subSet(E fromElement,
E toElement) |
|
tailSet(E fromElement, boolean inclusive) |
TreeSet<String> treeSet = new TreeSet<String>(); treeSet.add("a"); treeSet.add("b"); treeSet.add("c"); treeSet.add("d"); // 返回此 set 中当前最后一个(最高)元素。 treeSet.first(); // 返回此 set 中当前最后一个(最高)元素。 treeSet.last(); Iterator<String> iterator = treeSet.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next() + " "); } |
Map Map (key-value) 键值对存取,将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
void |
clear() |
boolean |
containsKey(Object key) |
boolean |
containsValue(Object value) |
boolean |
|
int |
hashCode() |
boolean |
isEmpty() |
void |
putAll(Map<? extendsK,? extends
V> m) |
int |
size() |
values() |
HashMap map 不允许插入相同的key值,允许插入key=null和value=null值
类 HashMap<K,V>
java.util.HashMap<K,V>
HashMap<Integer, String> hashMap = new HashMap<Integer, String>(); hashMap.put(1, new String("One")); hashMap.put(2, new String("Two")); hashMap.put(3, new String("Three")); hashMap.put(4, new String("Four")); hashMap.put(5, new String("Five")); System.out.println(hashMap.size()); System.out.println(hashMap); // 插入重复键值,会将之前的value的值覆盖掉,与set不同,set是不会插入,跳过 hashMap.put(1, new String("Six")); System.out.println(hashMap.size()); System.out.println(hashMap); // 插入key=null的值 hashMap.put(null, "Six"); System.out.println(hashMap); // 插入key=null的值和value=null值 hashMap.put(null, null); System.out.println(hashMap); // 循环 // keySet()获取key值的set集合 Set<Integer> sets = hashMap.keySet(); for (Integer i : sets) { System.out.print("key=" + i + " value=" + hashMap.get(i) + " "); } System.out.println(); // values()获取value值的集合 Collection<String> collection = hashMap.values(); for (String s : collection) { System.out.print(s + " "); } /** * map.entry 使用Map.Entry来遍历Map */ public void mapEntry() { HashMap<Integer, String> hashMap = new HashMap<Integer, String>(); hashMap.put(1, new String("One")); hashMap.put(2, new String("Two")); hashMap.put(3, new String("Three")); hashMap.put(4, new String("Four")); hashMap.put(5, new String("Five")); Set<Map.Entry<Integer, String>> set = hashMap.entrySet(); for (Iterator<Entry<Integer, String>> iterator = set.iterator(); iterator .hasNext();) { Entry<Integer, String> entry = iterator.next(); int key = entry.getKey(); String value = entry.getValue(); System.out.print(key + "-" + value + " "); } } |
LinkedHashMap
类 LinkedHashMap<K,V>
java.util.HashMap<K,V>
java.util.LinkedHashMap<K,V>
LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>(); linkedHashMap.put(1, new String("One")); linkedHashMap.put(2, new String("Two")); linkedHashMap.put(3, new String("Three")); linkedHashMap.put(4, new String("Four")); linkedHashMap.put(5, new String("Five")); for (Integer key : linkedHashMap.keySet()) { System.out.print(key + "-" + linkedHashMap.get(key)); } |
TreeMap
类 TreeMap<K,V>
java.util.TreeMap<K,V>
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(); treeMap.put(1, new String("One")); treeMap.put(2, new String("Two")); treeMap.put(3, new String("Three")); treeMap.put(4, new String("Four")); treeMap.put(5, new String("Five")); for (Integer key : treeMap.keySet()) { System.out.print(key + "-" + treeMap.get(key)); }
|
Properties 也是一种键值对形式。
类 Properties
java.util.Dictionary<K,V>
java.util.Hashtable<Object,Object>
java.util.Properties
Properties p = new Properties(); p.put("One", "一"); p.put("Two", "二"); p.put("Three", "三"); p.put("Four", "四"); System.out.println(p.getProperty("One")); System.out.println(p.getProperty("Five", "No find"));// getProperty还可以加以判断如果找了就返回对应的值,如果没有找到就返回你自己设定的值。 System.out.println("Write file..."); try { p.store(new FileOutputStream("Temp/filedemo.properties"), "hello properties");// 直接写入到指定的文件。 } catch (IOException e) { e.printStackTrace(); } System.out.println("+++++++++++++++++++++++++++++"); for (Object key : p.keySet()) { System.out.println(key + ":" + p.getProperty(key.toString())); } System.out.println("Read file..."); try { File file = new File("Temp/filedemo.properties"); InputStream is = new FileInputStream(file); p.load(is); } catch (IOException e) { e.printStackTrace(); } System.out.println("+++++++++++++++++++++++++++++"); for (Object key : p.keySet()) { System.out.println(key + ":" + p.getProperty(key.toString())); } |
EqualsAndHashcode
equals和hashCode在容器类对象调用remove、contains等方法时,需要比较对象是否相等,这会涉及到对象类型的
equals方法和hashCode方法;对于定义的对象,需要重写equals和hashCode方法一实现自定义对象相等规则
hashCode会在对象当前Map的键值的时候会用到
注意:相同的对象具有相同的hashCode,反之有相同的hashCode,但不一定对象相等
个人自我知识点的总结。
相关推荐
### Java基础学习总结 #### 一、Java基础知识 Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它具有平台独立性、安全性高、面向对象等特点,适用于开发各种应用程序。 ##### 1. IO流 IO流...
Java 基础学习是成为一名合格的 Java 开发者的关键步骤。本文将对 Java 基础知识进行详细的概述,包括 Java 程序的概念、Java 的应用领域、主要技术分支以及开发流程,并涵盖环境配置、IDE 使用以及编程规范。 首先...
本文档是基于毕向东老师的java基础视频和张孝祥老师的高薪技术视频和银行管理系统以及交通灯管理系统的视频所做的笔记。 知识主要包括:Java基础常识、如何安装Java工具、Java语言的基础组成、Java面向对象、Java多...
java基础学习总结文本1,格式解释说明: switch:说明这是switch语句。 表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case:后面的值就是要和表达式进行比较的值 break:表示程序...
这篇“Java基础知识总结(经典)”涵盖了Java开发中的核心概念和重要知识点,旨在为初学者和有经验的开发者提供一个全面的回顾。以下是主要的学习点: 1. **Java环境配置**:在开始编程之前,必须安装Java ...
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
这份"Java 基础核心总结_.zip"文件显然包含了学习Java编程所必需的重要知识点,旨在帮助初学者或开发者巩固基础。让我们逐一深入探讨这些主题: 1. **Java概述**:Java是一种跨平台、面向对象的编程语言,由Sun ...
### Java基础知识总结(绝对经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人所开发的Oak语言,原计划用于控制嵌入式设备如有线电视交换盒和个人数字助理(PDA)。1994年...
Java基础总结大全涵盖了Java编程语言的核心概念,从JVM、JRE和JDK的区别,到环境变量的设置,再到变量的定义和类型转换,深入浅出地讲解了Java的基础知识。 1. JVM、JRE和JDK: - JVM(Java Virtual Machine)是...
以上只是Java基础知识的冰山一角,深入学习Java还包括设计模式、网络编程、数据库连接、反射、注解、NIO等高级主题。Java的强大之处在于它的全面性、稳定性和广泛的应用场景,使其成为软件开发的首选语言。
看的东西不在多,而在于精, 程序设计最重要的就是上级操作了, 既然选择了,就该要有坚持的觉悟... Cookie使用. ...里面是当年自学JAVA时的一些笔记,内容都是TXT格式的,都是一些基础性的概念总结。
自己在网上找的相对好一点的java复习资料,留个纪念 。详细讲述了Java课程的知识点
"java基础总结资料"涵盖了Java语言的核心概念,是学习和复习Java基础知识的重要资源。以下是一些主要的知识点: 1. **Java语法基础**:包括变量声明、数据类型(基本类型和引用类型)、运算符、流程控制(如if语句...
### Java基础知识总结 #### 一、Java概述 Java是由Sun Microsystems公司(现已被Oracle收购)在1991年由James Gosling领导的团队所开发的一种面向对象的编程语言。最初被命名为Oak,目的是为了控制嵌入式设备和...