JAVA深入

来源:互联网 发布:开网店用什么软件好 编辑:程序博客网 时间:2024/05/21 18:40

JAVA深入第一章

本章学习要点:

  • 集合框架

  • 泛型

  • 实用类

集合框架

LIST接口
List 接口存储一组不唯一,有序(插入顺序)的对象
1) ArrayList类实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
<1>可以存放任何类型的数据
<2>list接口的方法
1)添加数据
list.add(object)
list.add(index,object)在此下标处添加
2) 数组长度
list.size
3)删除数据
list.remove(index)根据下标删除值
list.remove(object)根据具体的数据删除值(不能是整数型)
list.remove(new Integer(10))如果要通过具体的值删除整数型,需要将其转换成对象
4)修改数据
list.set(index,object)
5)查找数据
list.indexOf(Object obj) 查找第一次出现的索引位置
list.lastIndexOf(Object obj) 查找最后一次出现的索引位置
list.contains(object) 查找是否包含object
6)其他
list.get(index)通过下标得到数据
list.isempty()数组是否
list.clear()清空数据

2)LinkedList类采用链表存储方式。插入、删除元素时效率比较高
<1>拥有 ArrayList类所有方法
<2>拥有特有的方法
void addFirst(Object o) 将给定元素插入当前集合头部
void addLast(Object o) 将给定元素插入当前集合尾部
Object getFirst( ) 获得当前集合的第一个元素
Object getLast( ) 获得当前集合的最后一个元素
Object removeFirst( ) 移除并返回当前集合的第一个元素
Object removeLast( ) 移除并返回当前集合的最后一个元素

3)ArrayList与LinkedList对比
ArrayList
遍历元素和随机访问元素的效率比较高
插入、删除等操作频繁时性能低下
LinkedList
插入、删除元素时效率较高
查找效率较低

Set接口
Set接口存储一组唯一,无序的对象
HashSet 是Set接口常用的实现类
HashSet允许集合元素值为null
操作数据的方法与List类似,Set接口不存在get()方法

MAP接口
HashMap是Map接口最常见的实现类
存储一组成对的键-值对象,提供key(键)到value(值)的映射,通过key来索引
key不允许重复,相同的覆盖
value允许重复
添加的对象将转换为Object类型

HASHMAP的方法
Object put(key, value) 将相互关联的一个关键字(key)与一个值(value)放入该集合。
Object remove(Object key) 从当前集合中移除与指定键相关的映射,并返回该键关联的旧值。如果key没有任何关联,则返回null
Object get(Object key) 获得与关键字key相关的值。如果该键不关联任何非null值,则返回null
boolean containsKey(key) 判断集合中是否存在关键字key
boolean containsValue(value) 判断集合中是否存在值value
boolean isEmpty() 判断集合中是否有存在元素
void clear() 清除集合中所有元素
int size() 返回集合中元素的数量
Set keySet() 获取所有键key的集合
Set set = map.keySet();
for (Object object : set) {
System.out.println(object + “:” + map.get(object));
}
Collection values() 获取所有值value的集合
Collection collection = map.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}

遍历的3种方法
List list=new List();
list.add(1);
list.add(2);
list.add(3);
list.add(4);

1)常规遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
2 )foreach
for (Object object : list) {
System.out.println(object);
}
3)Iterator迭代器
Iterator it=list.iterator;//获取容器中的迭代器对象
while(it.hasNext()){
System.out.println(it.next());
}

collectino与collections的区别
1.java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
2.java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
sort():排序—实现一个类的对象之间比较大小,该类要实现Comparable接口重写compareTo()方法
public int compareTo(Student o) {
if (this.age < o.age)
return -1;
if (this.age > o.age) {
return 1;
}
return 0;
}
binarySearch():查找
public int compareTo(Student1 s) {
int num = this.age - s.age;
int num1 = (num == 0 ? this.name.compareTo(s.name) : num);
return num1;
}
fill():替换
collections.fill(list,’要替换的数据’)

泛型

将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
本质是参数化类型

实用类

枚举

枚举指由一组固定的常量组成的类型
语法:
[Modifier] enum enumName{
enumContantName1[,enumConstantName2…[;]]
//[field,method]
}

包装类和基本类型

int 是基本类型,直接存数值
Integer是类,有属性和方法,产生对象时用一个引用指向这个对象
Java把内存划分成两种:一种是栈内存,另一种是堆内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配
而实际的对象是在存储堆内存中

int i = 5;//直接在栈中分配空间
Integer i = new Integr(5);//对象是在堆内存中,而i(引用变量)是在栈内存中
在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理.
因为在堆中分配空间所需的时间远大于从栈中分配存储空间,所以JAVA速度比C 慢
当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的外覆类了。Java中每种基本类型都有相应的外覆类。

基本数据类型转换为包装类
Integer intValue = new Integer(21);
或Integer intValue = new Integer(“21”);
Integer intValue = Integer.valueOf(“21”);
包装类转换成基本类型
Integer integerId=new Integer(25);
int intId=integerId.intValue();
基本类型和包装类的自动转换
Integer intObject = 5;
int intValue = intObject;

Math类

Math.abs(-3.5) 计算绝对值
Math.max(2.5, 90.5) 计算最大值
Math.random() 产生0-1随机数
int random = (int) (Math.random() * 10);产生0-9之间的随机数

Random类

Random rand=new Random(); //创建一个Random对象
for(int i=0;i<20;i++){//随机生成20个随机整数,并显示
int num=rand.nextInt(10);返回下一个伪随机数,整型的 10是产生0-9 要产生0-X 就写rand.nexint(X+1)
System.out.println(“第”+(i+1)+”个随机数是:”+num);
}
用同一个种子值来初始化两个Random 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的。

String类

String类常用操作
计算字符串的长度
比较字符串
连接字符串
提取字符串

String类的方法:
1.连接字符串 str.concat().concat()或者+
2.比较字符串
==判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象
equals():检查组成字符串内容的字符是否完全一致
使用equalsIgnoreCase()方法 不考虑大小写比较
String string3 = “TranSItion”;
System.out.println(“transiTION”.equalsIgnoreCase(string3));
使用toLowerCase()方法 小写转化
System.out.println(string3.toLowerCase());
使用toUpperCase( )方法 大写转化
System.out.println(string3.toUpperCase());
3.计算字符串的长度
str.length()
4.提取字符串
得到第一个N和最后一个N的索引
String string3 = “TranSItion”;
System.out.println(string3.indexOf(“n”));
System.out.println(string3.lastIndexOf(“n”));

public String substring(int index)
提取从位置索引开始的字符串部分
String string4 = “this is test”;
System.out.println(string4.substring(2));
提取beginindex和endindex之间的字符串部分
System.out.println(string4.substring(5, 7));
beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算

5.public String trim():去除左右空格
String st1 = ” this is a “;
System.out.println(st1);
System.out.println(st1.trim());

6.字符串拆分
String str = “在使用字面值对整数赋值的过程中,可以将int literal赋值给byte short char int,只要不超出范围”;
System.out.println(str);
String[] strings = str.split(“,”);
for (String string : strings) {
System.out.println(string);
}

StringBuffer类

StringBuffer:String增强版
StringBuffer是类不能直接赋值,必须实例化
打印时必须转换成字符串
String string = buffer.toString();
追加字符串
buffer.append(“mike”).append(“\t”).append(“张三”);
StringBuffer可以将任何类型的值追加到字符串之后
insert()方法
str.insert(1,”ang”);在第几位插入字符串

String对象的值改变时,会重新分配内存空间来存放改变后的值

Date类

提供操作日期和时间各组成部分的方法

SimpleDateFormat类

用于定制日期时间的格式
Date date = new Date(); //创建日期对象
SimpleDateFormat formater = new SimpleDateFormat(“yyyy-
MM-dd HH:mm:ss”);//定制日期格式
String now = formater.format(date);
System.out.println(now);

Calendar类:

抽象类
用于设置和获取日期/时间数据的特定部分
Calendar类提供一些方法和静态字段来操作日历
方法或属性 说明
int get(int field) 返回给定日历字段的值
MONTH 指示月
DAY_OF_MONTH 指示一个月中的某天
DAY_OF_WEEK 指示一个星期中的某天

// Calendar类:    Calendar ca= Calendar.getInstance();    System.out.println(ca.get(1));    System.out.println(ca.get(Calendar.YEAR));    System.out.println(ca.get(3));    System.out.println(ca.get(5));    System.out.println(ca.get(Calendar.DAY_OF_YEAR));    //系统时间    System.out.println(ca.get(1)+"年"+(ca.get(2)+1)+"月"+ca.get(5)+"日");    // Calendar类:    Calendar ca1= Calendar.getInstance();    //固定的日期: 月:从1月份是=0;    ca1.set(2017, 0, 31);    //在原来的日期中再加5天    ca1.add(Calendar.DATE, 5);    System.out.println(ca1.get(Calendar.YEAR)+"年"+(ca1.get(Calendar.MONTH)+1)+"月"+ca1.get(Calendar.DATE)+"日");
原创粉丝点击