Java学习笔记(2015.7.27~7.31)

Java学习笔记(2015.7.27~7.31)

Java 课堂


Day16

(复习)

1、×××

数据的基本单位是bit(位)。

类型 bit Kb 范围
byte 8位 1字节 -128~127(2^8)
short 16位 2字节 -32768~32767(2^16)
int 32位 4字节 很大,略
long 64位 8字节 灰常大,略

2、数值的转换

char通过ASCII(英语发音/ski/)转成int,应用较多。

3、程序的机构

顺序

分支
循环

4、方法重写的常见问题

  • Duplicate method study() in type Student class

    方法重复了

  • The constructor Student() is undefined

    构造方法 未定义

  • Constructor call must be the first statement in a constructor

    this()调用重载(Overload)构造方法必须在第一行

  • The static field Chinese.guoji should be  

    accessed in a static way
    静态调用静态

Day18

1、容器Collection

1、概念:保存多个对象的对象。

2、JDk为什么提供容器

几乎所有程序员都需要的功能

3、API

应用程序接口 Application Programming Interface

4、容器的功能

  • 与数组相同

  • 自动增加或减小容器的长度

5、Collection接口常用方法

  • int size();

  • boolean isEmpty();

  • void clear();

  • boolean contains(Object element);要用到equals

  • boolean add(Object element);

  • boolean remove(Object element);

6、容器之间的操作(了解)

  • boolean cotainsAll(Collection c);

  • boolean addAdd(Collection c);

  • boolean removeAll(Collection c);

  • boolean retainAll(Collection c);求交集

7、List的特点

  • 按照保存顺序存放

  • 元素可以重复

8、Set的特点

  • 不按照保存顺序存放,按照自己的特定顺序

  • HashSet内部元素排序按照HashCode值

  • 元素不可以洪福

9、ArrayList的自动增加或减少元素的策略(了解)

ArrayList的内部实现使用了数组,如果元素个数小于10,数组大小为10,如果大于10,则为原长度+原长度的一半

10、Map(了解)

  • 保存键值对形式的数据

  • 例如:学号和学生姓名

  • 保存元素时,如果key相同,值会被覆盖

  • key是唯一的,不允许重复

11、迭代

  • 每个容器都实现了Iterator接口

  • 仅有三个方法:

    • boolean hasNext();

    • Object next();

    • void remove();

  • 迭代代码片段:

Iterator itr = c.iterator();while(itr.hasNext()) {    itr.next();}

2、自动拆装箱(了解)

AutoBoxing/AutoUnBoxing

基本类型 封装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
  • 字符包装类判断是否是数字或字母

boolean digit = Character.isDigit('4');System.out.println(digit);boolean letter = Character.isLetter('!');System.out.println(letter);

3、JDK增强for循环(了解)

for(Object str: list) {        System.out.println(str);}for(int i = 0; i

4、泛型(掌握)

  • 保证类型安全

  • 获取数据时不需要类型强制转换

List
 list = new ArrayList
();list.add("aaa");list.add(12);//错误,类型不符

5、iterator与for在迭代中的区别

  • Iterator做迭代时,迭代的对象有且只有一次;

  • for则没有这个开始,重复几次都可以。

Day19

1、List另一个子类--LinkedList

  • 存储性能

子类
ArrayList
LinkedList
  • 物理结构,ArrayList的底层是数组,LinkedList的底层是链表。

    • 数组:元素个数固定,空间连续

    • 链表:元素个数不固定,空间不连续

  • 功能角度:队列(堆),栈,树(了解)

    • 队列:普通模式,先进先出(First in First out)

    • 栈:后进先出,***夹模式(Last in First Out)

    • 树:有序二叉树,在一个分支中,左边的节点最小,右边的节点最大。

    • push:压入栈中

    • pop:讲栈顶部的元素弹出(最后进来的推出去)

  • ArrayList为什么有两个remove方法?

    答:remove(object o)是Collection都有的,remove(int index)是子类新添加的,因为ArrayList是基于数组实现的,所以才有了下标。

2、数组的常用方法

1、二分法查找

前提:数组必须是有序的

Arrays.binarySearch(arrays,key)

2、数组转换为List

List asList = Arrays。asList(1,2,3,4,5);

3、可变参数Type ... param (了解)

可变参数是以数组的方式实现的,所以不能同时存在以数组作为形参的方法重写。

3、排序

思路:

  • 使当前的类实现Comparable接口,增加可以与其他同类对象比较的能力

class Student implements Comparable
 {    private int id;        private String name;        public int compareTo(Student o) {            return this.id - o.id;        }}
  • 找其他具备比较能力的对象来比较

    1、创建一个类,实现Comparator接口,用来比较每两个Student的大小,排序时传入自定义的Comparator对象。

class StudentComparator implements Comparator
{    public int compare(Student o1, Student o2) {                return o1.id - o2.id;        }}……Comparator
 comparator = new StudentComparator();Collections.sort(list,comparator);

周末作业

小技巧

将字符转为数字

例如将'1'转为×××1

int a = Integer.valueOf('1'+"")

这样才能顺利转成1

常用方法

  • charAt() 字符串的方法

    字符串名.charAt(index) 将字符串中的字符取出

  • Collections.frequency(Collection c, Object o)

    返回指定 collection 中等于指定对象的元素数。