首页 > 代码库 > JAVA学习笔记(三)
JAVA学习笔记(三)
@SuppressWarnings("resource")是用来压制资源泄露警告的。比如使用io类,最后没有关闭。
Set集合特点:
1)无序,不随机
2)元素唯一
3)没下标
注意:Collection List Set 是接口
注意:因为Set 没有下标,所以取值是不能用for,只能用迭代器
HashSet: 内部结构是哈希表,所以元素唯一,无序,没下标。
TreeSet: 内部是二叉树,元素可以进行比较,可以按自然顺序比较,也可以由程序员自定义比较方式,没下
标。
LinkedHashSet:内部结构是哈希表及链表组成,所以有序,元素唯一,没下标。
HashSet:
HashSet<String> ss = new HashSet<String>();
ss.add("a");
ss.add("k");
ss.add("d");
ss.add("k");
Iterator<String> its = ss.iterator();
while (its.hasNext()) {
System.out.println(its.next());
}
结果:无序的
LinkedHashSet:
LinkedHashSet<String> s = new LinkedHashSet<String>();
s.add("a");
s.add("g");
s.add("d");
s.add("g");
Iterator<String> it = s.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
结果:a g d 有序(按存入的顺序取出)
Map接口特点:有键(key),值(value)且成双出现。
Map接口中的方法
1.添加 V put(K key, V value)
2.删除 V remove(Object key)
void clear()
3.判断 boolean isEmpty()
boolean containsKey(Object key)
boolean containsValue(Object value)
4.获取 V get(Object key)
int size()
Set<K> keySet()
Map取值
//不重,没序,没下标,没迭代,值成双出现,key和value都可能为空(可以同时为空),如果key相同,会覆
盖value
Map<String,String> map = new HashMap<String,String>();
map.put("1","aa");
map.put("2","bb");
map.put("3","cc");
map.put("4","ff");
map.put("5","ff");
//map.get("5");//一个一个取
Set<String> set = map.keySet();//当前set中存的都是key
Iterator <String> it =set.iterator();
while(it.hasNext()){
String key = it.next();
String value = http://www.mamicode.com/map.get(key);
System.out.println("key="+key+",value="http://www.mamicode.com/+value);
}
HashMap 和HashTable的区别
HashMap:线程不安全,速度快,允许存放null键,null值。
Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
TreeMap:对键进行排序,排序原理与TreeSet相同。
For循环的新用法:
ArrayList<String> list = new ArrayList<String> ();
list.add("a");
list.add("b");
//1)普通for
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//2)增强for
for(String temp : list)
{System.out.println(temp);
}
注意:1)增强for要和泛型一起使用
2)增强for没有下标
为什么要有包装类:方便我们操作基本数据类型中的数据
注意:
char(字符型) Character
int(整型) Integer
其余的 首字母大写
基本数据类型------------字符串
1)+字符串联接符
int i = 1;
String str = i + "";
2)String 里有方法
String str2=String.valueOf(i);
字符串-------基本数据类型
String str3="a";
int a=Integer.parseInt(str3);
注意:字符串必须是数字,否则报错NumberFormatException
包装类------ 基本数据类型
Integer itsss = new Integer("20");
int age = itsss.intValue();
自动装箱与自动拆箱
以前: int m = 4;
int n = 5;
int b = m + n;
如果:Integer m= new Integer(4);
int b=m.intValue()+5; --->m由包装类变成基本数据类型后+5
现在 :JDK5.0以后新出功能
Integer p=4;//自动装箱(基本数据类型转成包装类)
int b=p+5; //自动拆箱(包装类转成基本数据类型)
List<Integer> list = new ArrayList<Integer>();
list.add(1);//自动装箱(基本数据类型转成包装类)
好处:方便程序编写。
包装类中的equals( )方法
包装类重写Object中的equals( )方法 ,比较的是数值是否相等
Integer a1= new Integer("20");
Integer a2= new Integer(20);
System.out.println(a1.equals(a2));//true
包装类中的compareTo( )方法
public int compareTo(Integer anotherInteger)
Integer a1= new Integer("40");
Integer a2= new Integer(30);
System.out.println(a1.compareTo(a2));
a1的值==a2 的值返回0
a1的值<a2 的值返回负数
a1的值>a2 的值返回正数
Object类:是所有类的根类,本类中的所有方法,所有类都继承。
equals与==
1)基本数据类型的比较:
3==3 true(比较的是值)
2)对象的比较:
New Person( ) == New Person( ) false(比较的是内存地址)
3)对象的比较:
New Person( ).equals( New Person( ) ) false(比较的是内存地址)
4)String 类中的equals,重写了Object中的equals,比较的是字符串的内容
==比较的是地址
hashCode
返回该对象的哈希码值:
New Person( ).hashCode() -->int 值25860399 对象的地址10进制的
Integer.toHexString(25860399)->10进制数转成16进制数
类似于a.ForTest@18a992f
哈希码值就是对象的地址值。
getClass
对象名.getClass();得到当前对象的包名及类名
toString
ForTest f6 = new ForTest();
System.out.println(f6); //f6 相当于f6.toString(),它默认调用Object类中的toString()方法
注意:
如果我们在ForTest 类中重写toString(),那么System.out.println(f6); 后输出的值是重写方法里的值。
1)常量池(直接赋值的):
String a = “abc”; -->在池中创建”abc”串
a=“bcd”--->“在池中创建”bcd”串
a = “abc”; --->用池中已创建好的”abc”串
2)String a = new String(“aa”);---->“aa”不在池中在对象中
String类常用方法
1.获取字符串的长度int length()
2.根据位置获取字符char charAt(int index)
3.根据字符获取在字符串中第一次出现的位置
int indexOf(String str)
int indexOf(String str, int fromIndex) 从指定位置开始查找
4.根据字符获取在字符串中第一次出现的位置
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex) 从指定位置开始查找
5.获取字符串中一部分字符串,也叫子串
String substring(int beginIndex)
String substring(int beginIndex, int endIndex) beginIndex - 起始索引(包括) endIndex -
结束索引(不包括)。
6.转换
1)字符串转换成字符串数组(切割)
String[] split(String regex) ,# 空格 \ .
2)字符串转换成字符数组
char[] toCharArray()
3)字符串转换成字节数组
byte[] getBytes()
4)将字符串中的字符全部大写
String toUpperCase()
5)将字符串中的字符全部小写
String toLowerCase()
6)将字符串中的内容进行替换
String replace(char oldChar, char newChar)
7)将字符串两端空格去掉
String trim()
8)字符串连接
String concat(String str)
9)将基本类型变成字符串
static String valueOf(Object obj) 100变成字符串
7.判断
1)比较字符串内容:
boolean equals(Object anObject)
2)不考虑大小写比较字符串内容:
boolean equalsIgnoreCase(String anotherString)
3)字符串是否包含指定字符串
boolean contains(String s)
4)字符串是否以指定字符串开头,以指定字符串结尾
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束 (区分大小写)
8.比较
int compareTo(String anotherString)
StringBuffer类
是字符串缓冲区,串缓冲区的作用就是为了方便操作字符串
StringBuffer类特点
1.长度可变
2.可以存储不同类型的数据
3.接收不同类型数据,最终要转成字符串进行使用
StringBuffer sb = new StringBuffer("aa");
System.out.println(sb.toString());
4.可对字符串进行修改
StringBuffer构造方法
StringBuffer sb = new StringBuffer( ); 缓冲区是空的,长度是0
StringBuffer sb = new StringBuffer("aa"); 缓冲区不是空的,长度是2
StringBuffer方法
1.添加
StringBuffer append(boolean b)
StringBuffer insert(int offset, boolean b)
2.删除
public StringBuffer delete(int start, int end) 不包括end
StringBuffer deleteCharAt(int index) 删除某一个位置上的字符
3.查找
char charAt(int index)查找某一个位置上的字符
int indexOf(String str)查找指定字符串的下标
int lastIndexOf(String str)
4.修改
StringBuffer replace(int start, int end, String str) 不包括end
void setCharAt(int index, char ch)
5.反转
StringBuffer reverse()
finalize()
垃圾回收器在进行回收之前要调用的方法,此方法一般用于释放资源。
System.gc():建议垃圾回收器干活。一般不手动使用。
Math类
static double ceil(double a) 返回大于参数的最小整数
static double floor(double a)返回小于参数的最大整数
static int round(float a)四舍五入
static double pow(double a, double b) a的b次方
static double random()返回带正号的 double 值,该值大于等于0.0且小于1.0。
System类
返回以毫秒为单位的当前时间。
static long currentTimeMillis()
static void exit(int status)终止当前正在运行的 Java 虚拟机。 status=0正常、1异常退出
static void gc()“建议”运行垃圾回收器。
Date
当前系统时间。位置于java.util包
方法:
new Date(); //得到系统的当前时间 显示格式不是中国方式
new Date(long date); //通过毫秒数得到年月日,分时秒
long getTime() //得到当前毫秒数
System.currentTimeMillis(); //得到当前毫秒数
注意:日期对象与毫秒之间的转换
1)日期对象--转换----》毫秒
Date d = new Date();
long lo = d.getTime();
2)毫秒--转换----》日期对象
Date d =new Date(lo);
DateFormat
格式化时间用的(格式的风格是固定的)位置于java.text包
这个DateFormat是一个抽象类,不能创建对象
格式器的获得:
DateFormat.getDateInstance();这种格式器只有年-月-日
DateFormat.getDateTimeInstance();//年-月-日 时:分:秒
DateFormat.getDateInstance(int 参数)://通过参数来指定风格
例子:
Date d =new Date();
DateFormat df = DateFormat.getDateInstance();//2016-10-27 Thu Oct 27 10:57:57
CST 2016------format------->2016-10-27
String dateStr=df.format(d);
System.out.println(dateStr);
DateFormat df1 = DateFormat.getDateTimeInstance();//2016-10-27 10:36:38 Thu Oct
27 10:57:57 CST 2016------format------->2016-10-27 10:36:38
String dateStr1 = df1.format(d);
System.out.println(dateStr1);
DateFormat df2 = DateFormat.getDateInstance(DateFormat.FULL);//2016年10月27日 星
期四
String dateStr2= df2.format(d);
System.out.println(dateStr2);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);//2016年10月27日
String dateStr3= df3.format(d);
System.out.println(dateStr3);
DateFormat df4 = DateFormat.getDateInstance(DateFormat.SHORT);//16-10-27
String dateStr4= df4.format(d);
System.out.println(dateStr4);
DateFormat df5 = DateFormat.getDateInstance(DateFormat.MEDIUM);//2016-10-27
String dateStr5= df5.format(d);
System.out.println(dateStr5);
SimpleDateFormat
格式化时间用的(格式的风格是自定义的)位置于java.text包。通过参数来指定格式
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yy--MM--dd HH-mm-ss");
String str = sdf.format(d);
System.out.println(str);
结果:16--03--05 09-20-22
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse("2009-06-14 09:20:22");
把字符串类型的日期转成Date类型的日期
Calendar
日历 位置于java.util包
是一个抽象类,不能创建对象、
得到日历:
Calendar rightNow = Calendar.getInstance();
System.out.println(rightNow);
用日历中的方法,得到值:
int year = rightNow.get(Calendar.YEAR);//取日历中的年
System.out.println(year);
int month = rightNow.get(Calendar.MONTH);//取日历中的月 从0开始
System.out.println(month);
int date = rightNow.get(Calendar.DAY_OF_MONTH);//取日历中的日 1)DAY_OF_MONTH 2)
DATE 都是从1开始,两个参数是一样的
System.out.println(date);
int weekday = rightNow.get(Calendar.DAY_OF_WEEK);//取日历中的星期几 从周日 开始
算为1 星期4,就是5
System.out.println(weekday);
JAVA学习笔记(三)