164_基本数据类型对象包装类_黑马程序员_Java基础视频
/*
基本数据类型对象包装类
byte 基本数据类型 Byte 引用数据类型.
short Short
int Integer
boolean Boolean
float Float
double Double
char Character
long Long
byte Byte
基本数据类型对象包装类的最常用作用.
就是用于基本数据类型和字符串类型之间转换.
基本数据类型转成字符串.
字符串转成基本数据类型.
基本数据类型+""
专业做法;
基本数据类型.toString[基本数据类型中];
如 Integer.toString(34);//将34整数变成34字符串.
字符串转成基本数据类型.
xxx a=Xxx.parseXxx(String);
int a =Integer.parseInt("123");
boolean a=Boolean.parseBoolean("true");
十进制转成其他进制
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制
parseInt(string s,int radix);
静态调用方式
对象调用方式.
*/
165_基本数据类型对象包装类新特性_黑马程序员_Java基础视频
Integer x=new Integer(4);
JDK1.5版本以后出现的新特性.
Integer x=4;//自动装箱
x=null;/为空会抛异常,要做判断.
x=x/*x.intValue()*/+2;//x+2:x进行了自动拆箱,变成了int类型,和2进行了加法运算.
再将和进行装箱赋给了x.
类类型变量肯定指向的是对象.
引用数据类型,基本数据 对象
Integer m=128;
Integer n=128;
m==n false;
Integer a=127;
Integer b=127;
结果为true;因为a 和b指向了同一个Integer对象.
因为当数值在byte范围内容对于新特性,如果该数值已经存在,则不会在开辟新空间.
166_集合框架(体系概述)_黑马程序员_Java基础视频
集合类
集合框架
为什么出现集合类.
面向对象语言对于事物的体现都是以对象形式,所以为了方便对多个对象的操作.
就对对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.
数组和集合类同是容器,有何不同.
数组虽然也可以存储对象,但长度是固定的,集合是长度可变的.
数组中可以存储基本数据类型,集合只能存储对象.
集合类的特点
集合只用于存储对象,集合对象是可变的,集合可以存储不同类型的对象.
Collection
子接口 List Set
常见子类,,ArrayList LinkedList Vector
HashSet TreeSet
集合框架
为什么会出现这么多容器呢?
因为每一个容器对数据的存储方式都有不同.
这个存储方式可以称之为:数据结构.
167_集合框架(共性方法)_黑马程序员_Java基础视频
168_集合框架(迭代器)_黑马程序员_Java基础视频
Collection 是根接口.
Iterator it=a.iterator()
获取迭代器.用于取出集合中的元素.
什么是迭代器
其实就是元素的方式.
就把取出方式定义在集合的内部,这样取出方式,就可以直接访问
集合内部的元素,那么取出方式就被定义成了内部类.
而每一个容器的数据结构不同.所以取出的,动作细节也不一样.
但是都有共性内容,判断和取出,,那么可以将这些共性功能抽取.
那么这些内部类都符合一个规则,该规则是Iterator
如何获取结合的取出对象呢?
通过一个对外提供的方法 iterator();
169_集合框架(List集合共性方法)_黑马程序员_Java基础视频
170_集合框架(ListIterator)_黑马程序员_Java基础视频
171_集合框架(List集合具体对象的特点)_黑马程序员_Java基础视频
.Collection
|--List:元素是有序的,元素可以重复,因为该结合体系有索引
|--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快,但是增删稍慢..线程不同步
|--LinkedList:底层使用的是链表数据结构 特点:查询速度慢,但是增删快
|--Vector:底层的数据结构用的是数组结构,JDK1.0 元老级干部..线程同步. 被ArrayList替代的了.
|--Set:元素是无序的,元素不可以重复,该集合中没有索引.
ArrayList 可变长度数组.初始10,百分之50延长
Vector 可变程度也是10,百分之100延长
开发的时候.一般都是用
List:特有方法:凡是可以操作角标的方法都是该体系特有方法
增
add(index,element)
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();迭代器
Iterator it=al.iterator();
while(it.hasNext()){
sop("next:"+it.next());}
List 集合特有的迭代器,ListIterator是Iterator的子接口.
在迭代时,不可以通过集合对象的方法操作集合中的元素.
因为会发生,ConcurrentModificationException异常
所以在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的.
只能对元素进行判断,取出,删除的操作.
如果想要其他操作如添加,修改等,就需要使用其子接口叫做listIterator
该接口只能通过List集合的listIterator方法获取.
172_集合框架(Vector中的枚举)_黑马程序员_Java基础视频
枚举就是Vector特有的取出方式.
发现枚举和迭代器很象.
其实枚举和迭代是一样的.
因为枚举的名称以及方法的名称都过长.
所以被迭代器取代了.
枚举郁郁而终了.
173_集合框架(LinkedList)_黑马程序员_Java基础视频
LinkedList:特有方法.
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素
removeFirst();
removeLast();
获取元素,但是元素被删除.如果集合中没有元素会出现NoSuchElementException
在JDK1.6出现了替代方法.
offerFirst();
offerLast();
peekFirst();
peekLast();
pollFrst();
pollLast();
获取元素,但是元素被删除.如果集合中没有元素会出现会返回null
174_集合框架(LinkedList练习)_黑马程序员_Java基础视频
175_集合框架(ArrayList练习)_黑马程序员_Java基础视频
使用LinkedList模拟一个堆栈或者队列数据结构
堆栈:先进后出,如同一个杯子
队列,先进先出,first in first out FIFO如果一个水管.
去除ArrayList集合中的重复元素.
176_集合框架(ArrayList练习2)_黑马程序员_Java基础视频
将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如存人对象, 同姓名,同年龄.势为同一个人,为重复元素.
思路
1,对人描述,将数据封装进人对象.
2,定义容器,将人存入.
3,取出.
List集合判断元素是否相同,依据的是元素的equals 方法.
177_集合框架(HashSet)_黑马程序员_Java基础视频
178_集合框架(HashSet存储自定义对象)_黑马程序员_Java基础视频
179_集合框架(HashSet判断和删除的依据)_黑马程序员_Java基础视频
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复.
|--HashSet:底层数据结构是哈希表
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成.
如果元素的HashCode值相同,才会判断equals是否为true.
如果元素的hashcode值不同不会调用equals
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals.
Arraylist 只依赖equals HashSet依赖hashcode再依赖equals 这就是hash表的特点.
开发的时候,一般都会复写hashcode equals
public int hashCode(){
return name.hashCode()+age*39;//name.hashCode()+age*27
}
|--TreeSet:
Set集合的功能和Collection是一样的.
往hashSet集合中存入自定义对象.
姓名和年龄相同为同一个人,重复元素.