一、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的更多相关文章

  1. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

  2. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  3. java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序

    java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...

  4. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  7. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  8. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  9. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  10. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. Golang 绘图技术(image/draw包介绍)

          image/draw 包仅仅定义了一个操作:通过可选的蒙版图(mask image),把一个原始图片绘制到目标图片上,这个操作是出奇的灵活,可以优雅和高效的执行很多常见的图像处理任务. 1 ...

  2. hdu 1850 Being a Good Boy in Spring Festival(Nimm Game)

    题意:Nimm Game 思路:Nimm Game #include<iostream> #include<stdio.h> using namespace std; int ...

  3. 性能测试之系统监控工具nmon

    一.概述 本篇文章主要讲解nmon,以下为目录 1.nmon介绍 2.nmon下载.安装及使用 3.nmon analysis 分析及使用,各个项的含义 二.详细信息: 1.nmon介绍: nmon( ...

  4. LoadRunner学习记录--安装遇到的问题一

    安装过程中的出现了此计算机上缺少vc2005_sp1_with_atl_fix_redist 需要到这个目录下lrunner\En\prerequisites\vc2005_sp1_redist\ 手 ...

  5. 面积最大的全1子矩阵--九度OJ 1497

    题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行是 ...

  6. echart图表控件配置入门(二)常用图表数据动态绑定

    上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...

  7. 【开源项目之路】jquery的build问题

    在刚开始clone了jquery到本地build的时候,就遇到了问题. “ENORESTARGET No tag found that was able to satisfy ...” 提示为bowe ...

  8. First & First

    First有记录则返回,否则返回null FirstOrDefault有记录则返回,否则NEW一个新的实体对象返回  

  9. log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.

    The reason for the error is a new listener in Tomcat 6.0.24. You can fix this error by adding this l ...

  10. C# Keynote

    [C# Keynote] 1. Main 方法必须包含在一个类内,参数类型.返回值类型可以有多种变化. // Hello1.cs public class Hello1 { public static ...