Java学习笔记(4)——JavaSE
一、HashMap
HashMap以键值对的形式存储对象,关键字Key是唯一的,不重复的
1,key可以是任何对象,Value可以任何对象
2,重复的key算一个,重复添加是替换操作(会覆盖原来的元素)
3,根据key的散列值计算散列表,元素按照散列值排序
4,HashMap默认的容量是16,默认加载因子0.75
5,HashMap根据Key检索查找value值
hashMap常用的方法:
clear()
containsKey(Object key)
containsValue(Object value)
get()
isEmpty()
keySet() 返回所有的key(注意:返回值都放入set集合中)
put(key , value) 向Map中加入元素
remove(Object o)
size()
二、集合框架(Collection和Map)
集合框架包括集合与映射(Collection and Map),以及它们的子类(容器类)
1,List元素有先后次序的集合,元素有index位置,元素可以重复,继承自Collection接口
实现类: ArrayList,Vector,LinckedList
2,Set元素无序,不能重复添加,是数学意义上的集合,继承自Collection接口
实现类: HashSet(是一个只有Key的HashMap)
TreeSet
3,Collection 集概念,没有说明元素是否 重复和有序,使用集合的根接口,很少直接使用
其他集合都是实现类:ArrayList, HashSet
4,Map描述了(Key:Value)成对放置的集合,Key不重复,Value可以重复(Key重复算一个)
实现类:HashMap(散列表算法实现)
TreeMap(二叉树实现,利用Key排序)
Map适合检查查找
三、集合的迭代
集合的迭代,是一种遍历算法
1,java使用Iterator接口描述了迭代模式操作
Iterator中的方法,专门为while循环设计
2,Iterator的实例可以从集合对象获得,是这个集合的一个元素序列视图,默认包含一个操作游标
(这个游标在第一个元素之前)
hasNext()方法,可以检查游标是否有下一个元素
next()方法,移动游标到下一个元素,并且返回这个元素引用。
使用while循环配合这两个方法,可以迭代处理集合的所有元素
4,迭代时可以使用迭代器remove()方法删除刚刚迭代的元素在迭代过程中
迭代时不能使用集合方法(add, remove,set)更改集合元素!
--------------------------------------------------------------------------
Iterator<String> ite = eggs.iterator();
while(ite.hasNext()){
String egg = ite.next();
System.out.println(egg);
}
--------------------------------------------------------------------------
四、集合工具类Collections
同数组的工具类Arrays相同,集合的工具类为Collections,其中提供了许多的方法,诸如排序,
二分查找,打乱,填充等操作。
Collections.sort()底层调用了str.compareTo()方法比较大小
五、Comparable和Comparator
Comparable表示可以比较的(用于类实现)
实现这个接口表示:这个类的实例可以比较大小,可以进行自然排序
compareTo()返回正数表示大,返回负数表示小,返回0表示相等
Comparable的实现必须与equals()的结果一致,就是相等的对象时候,比较结果一定是0!
Comparator 比较工具
用于临时定义比较规则,不是默认比较规则
------------------------------------------------------------------------------------------
String[] strs = {"abcff", "abc", "abde", "a"};
Arrays.sort(strs, new Comparator(){
//回调函数
public int compare(Object o1, Object o2){
String s1 = (String) o1;
String s2 = (String) o2;
return s1.length() - s2.length();
}
});
System.out.println(Arrays.toString(strs));
-------------------------------------------------------------------------------------------
六、java中的包装类
包装类可以把基本类型包装为对象类型。
1,共有8种包装类
int Integer
long Long
byte Byte
short Short
float Float
double Double
boolean Boolean
char Character
2,包装类提供了对应数据类型的工具方法
Integer.toHexString()
Integer.toString(int)
Integer.toBinaryString()
Integer.parseInt(String)
Integer.parseInt(String, int)
Double.parseDouble(String str);
3,自动包装(auto boxing/ unboxing)
java5以后可以
4,注意点
包装类是final的类
包装类对象是不变的,与字符串类似(不变模式)
Integer a = 1;
Integer b = 2;
a = a + b ;
a = new Integer(a.intValue() + b.intValue())
包装类覆盖了 toString(), equals(), hashCode(), compareTo()方法
七、集合复制
java默认集合的复制规则是浅层复制
集合复制有2种方式
1,clone()方法
clone()方法是Object定义的
2,使用"复制构造器"
Map map = new HashMap();
Map map2 = new HashMap(map);
List list1 = new ArrayList();
List list2 = new LinkedList(list1);
浅表复制clone()方法
-------------------------------------------------------------------------------------
package notebook;
import java.util.*;
public class CollectionClone {
public static void main(String[] args){
ArrayList<FOO> list = new ArrayList<FOO>();
list.add(new FOO());
list.add(new FOO());
ArrayList<FOO> list2 = (ArrayList<FOO>)list.clone();
ArrayList<FOO> list3 = list;
System.out.println(list3 == list);
System.out.println(list2 == list); //复制第一层
System.out.println(list2.get(0) == list.get(0)); //第二层元素没有被复制
}
}
class FOO{
int a = 1;
}
-------------------------------------------------------------------------------------
浅表复制”复制构造器“
1,所有集合都有”复制构造器“,是浅表复制
2,”复制构造器“的参数是多态,可以在不同种类的集合间复制
-------------------------------------------------------------------------------------
package notebook;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionClone{
public static void main(String[] args){
ArrayList<FOO> list = new ArrayList<FOO>();
list.add(new FOO());
list.add(new FOO());
LinkedList<FOO> list4 = new LinkedList<FOO>(list);
HashSet<FOO> set = new HashSet<FOO>(list);
System.out.println(list4.containsAll(list));
System.out.println(set.containsAll(list));
}
}
class FOO{
int a = 1;
}
-------------------------------------------------------------------------------------
八、同步化(线程安全)
同步化解决方案
1,Collections.synchronizedList()方法可以将非线程安全的list包装为线程安全的
List list = new ArrayList();
list = Collections.synchronizedList(list); //转换以后就相当于Vector
2,Collections.synchronizedMap()方法可以将非线程安全的map包装为线程安全的
HashMap map = new HashMap();
map = Collections.synchronizedMap(map);
九、数组与集合的转换
1,数组转集合
---------------------------------------------------------------------------------------
package notebook;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Demo {
public static void main(String[] args){
String[] names = {"zs", "ls", "wu"};
List list = Arrays.asList(names);
//list.add("hh"); 有异常
//复制为全功能的list
List list2 = new ArrayList(list);
list2.add("ww");
System.out.println(list2);
//或放入set集合
Set se = new HashSet(list);
se.add("hh");
System.out.println(se);
}
}
---------------------------------------------------------------------------------------
2,集合转数组
---------------------------------------------------------------------------------------
package notebook;
import java.util.*;
public class Demo02 {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("ls");
list.add("wu");
list.add("zs");
//集合转指定类型数组
String[] str = (String[])list.toArray(new String[]{});
for(String s:str){
System.out.println(s);
}
}
}
---------------------------------------------------------------------------------------
十、Collection与Collections
面试可能会遇到的题目,Collection和Collections的区别是什么?
Collection 抽象的集合概念,实现它的有List和Set
Collections 集合静态工具类,包含集合的工具方法,如sort()等
Java学习笔记(4)——JavaSE的更多相关文章
- 20145330第六周《Java学习笔记》
20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序
java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- Win7+xp命令行 一键修改IP、DNS
这里提供了一个简便方法:(该方法为Win7下的,XP下的见最后一行) 第一步:新建一个txt文件 第二步:在文件中添加如下内容: netsh interface ip set address name ...
- Cocos2d-android (06) 屏幕触摸事件及坐标转换
为屏幕添加触摸事件,将左上角坐标转换为左下角坐标 package com.arlen.cocos2d.touch01; import org.cocos2d.layers.CCLayer; impor ...
- 【DWT笔记】基于小波变换的降噪技术
[DWT笔记]基于小波变换的降噪技术 一.前言 在现实生活和工作中,噪声无处不在,在许多领域中,如天文.医学图像和计算机视觉方面收集到的数据常常是含有噪声的.噪声可能来自获取数据的过程,也可能来自环境 ...
- CAD操作
1.建立构造线 说签名和图签不在同一条直线上,如何判断两个对向到底是不是在一条线上呢?通过构造线( Construction Line)可以进行判断,CAD中打入: xl 命令,再键入h(horizo ...
- SQL Server 2008 备份改进版
1.Add compressing function with 7-Zip 2.With tool win.rar code so you can change it if you want USE ...
- win+r 快速启动应用程序
如何使用WIN+R快捷键快速启动应用程序呢?其实很简单 首先随便在一个盘上建一个新文件夹,随便取什么名字,最好是英文格式,小编以D盘为例,如图 2. 打开文件夹,单击右键,选择“新建”,单击“快捷方式 ...
- effective c++:virtual函数在构造函数和析构函数中的注意事项
如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造函数和一个copy assignment操作符. class Empty { p ...
- Windows Server 2003单网卡搭建VPN
Windows Server 2003单网卡搭建VPN 1.打开[控制面板] --> [管理工具] --> [路由和远程访问] 2.鼠标右击你要管理的电脑 在弹出式菜单中选中[配置并启 ...
- Hadoop中的辅助类ToolRunner和Configured的用法详解
在开始学习hadoop时,最痛苦的一件事就是难以理解所写程序的执行过程,让我们先来看这个实例,这个测试类ToolRunnerTest继承Configured的基础上实现了Tool接口,下面对其用到的基 ...
- .gitignore 文件列表
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在https://github.com/github/gitignore 找到它.