------- android培训、java培训、期待与您交流! ----------
集合
基本数据类型包装类:
byte short int long float double char boolean
Byte Short Integer Long Float Double Character Boolean
基本数据类型-->字符串
1.基本数据类型+“”
2.用String类中的静态方法valueOf(基本数据类型)
字符串-->基本数据类型
1.使用包装类中的静态方法xxx parseXxx(“xxx”);
int/long/boolean parseInt/Long/Boolean(String str);
只有Charactor没有parse方法
2.如果字符串被Integer进行对象的封装,可使用另一个非静态方法intValue
3.用Integer的静态方法valueOf(String str)
十进制-->其他进制
1.String toBinaryString(int i);转二进制
2.String toOctalString(int i);转八进制
3.
String toHexString(int i);转十六进制
4.String toString(int i,int radix);转radix进制
其他进制-->十进制
int parseInt(String str,int radix);将radix进制的str转化为十进制
自动装箱,自动拆箱:JDK1.5以后,自动装箱一个字节以内不再重新开辟空间,以外会重新开辟空间。
练习:对一个字符串中的数值进行从小到大的排序“20 93 4 -3 93 74 39”
集合类:用于封装特有数据,存储个数不确定对象
特点:用于储存对象的容器,集合长度可变,不可以储存基本数据类型值
集合数组的区别:集合长度可变,数组长度固定;集合只存储对象,数组可存储基本数据类型。
集合框架的构成和分类:
Collection接口:
常见方法:
①:添加
boolean add(Object obj);添加时判断已存在则返回false
boolean addAll(Collection coll);
②:删除
boolean remove(Object obj);
boolean removeAll(Collection coll);
void clear();
③:判断
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean isEmpty();
④:获取
int size();
Iterator iterator();迭代器
该对象必须依赖于容器,是在容器中内部实现的,且实现方法不同
⑤:其他
boolean retainAll(Collection coll);取交集
Object toArray();将集合转成数组
List、Set(Collection子接口)区别:
List:有序(存入和取出顺序一致),元素都有索引(角标),允许元素重复
Set:元素不能重复,无序
List
特有的常见方法:
①:添加
void add(index ,element);
void addAll(index,collection);
②:删除
Object remove(index );
③:修改
Object set(index ,element);
④:获取
Object get(index );
int indexOf(object);//不包含则返回-1
int lastIndexOf(object);
List subList(from,to)返回之间的部分
⑤:其他
在迭代器过程中,不要使用集合操作元素,容易出现异常,可以使用迭代器接口的子接口ListIterator来完成在迭代中对元素的更多操作
Iterator方法:hasNext(); next();
List的实现类:
Vector:内部是数组结构,同步的,增删查询都很慢(几乎不用)
ArrayList:内部是数组结构,是不同步的,替代了Vector,查询快
LinkedList:内部是链表结构,是不同步的,增删速度快
LinkedList方法:
addFirst();//在链表前端添加
addLast();
getFirst();//获取但不移除,若链表为空,抛出NoSuchElementException
getLast();
removeFirst();//获取并移除,若链表为空,抛出NoSuchElementException
removeLast();
JDK1.6更新后对应上方的新方法:
offerFirst();
offerLast();
peekFirst();//获取但不移除,若链表为空,返回null
peekLast();
pollFirst();//获取并移除,若链表为空,返回null
pollLast();
Set:
其接口中的方法和Collection一致
HashSet:内部数据结构是哈希表,是不同步的
TreeSet:可以对Set集合中的元素进行排序,是不同步的
哈希表判断元素是否相同:先判断哈希值(判断的是对象的HashCode方法),若相同,再判断内容(用equals方法);
练习:
1.往HashSet集合中存储Person对象,若姓名年龄相同视为同一元素
2.定义功能去除ArrayList中的重复元素
3.无序变有序,使用LinkHashSet
TreeSet
判断元素唯一性方式:返回值是0即相同元素,不存
对元素进行排序:
方法一:让元素自身具备比较功能,元素需实现Comparable接口,覆盖compareTo方法;
方法二:让集合自身具备比较功能,定义类实现Comparator接口,覆盖compare方法,该类作为参数传递给TreeSet集合的构造函数。
如果自定义类实现了Comparable接口,并且TreeSet集合的构造函数中也传入了比较器,那么将以比较器的比较规则为准
TreeSet集合的底层是以二叉树进行排序的
练习:对字符串进行长度排序
二叉树结构:
泛型:JDK1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制
好处:将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员解决问题,让运行时问题减少,安全,避免了强制转换的麻烦
格式:通过<>来定义要操作的引用数据类型
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可
泛型限定:
当类型不确定时,可用通配符“?”表示
上限:限定为E类型及其子类<? extends E>
下限:限定为E类型及其父类<? super E>
Map:
Map一次添加一对元素(双列集合,存储键值对),须保证键的唯一性
Collection一次添加一个元素(单列集合)
Map常用方法:
①:添加
value put(key,value);返回前一个和key关联的值,如果没有返回null
②:删除
value remove(Object key);根据指定的key删除这个键值对
void clear();
③:判断
boolean containsKey(key)
boolean containsValue(value);
boolean isEmpty();
④:获取
value get(key);如果没有返回null
int size();获取键值对个数
Set keyset();返回此映射中的键的set视图
Set<Map.Entry<k,v>> entrySet();返回此映射中的映射关系的set视图
Map集合元素取出方式:
1.Set<k> keyset:将Map中所有的键存入到Set集合,因为Set具备迭代器
Map:集合取出原理:将map集合转成set集合,再通过迭代器取出
2.Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,这个关系的数据类型就是Map.Entry
Map常用子类:
Hashtable:底层数据结构哈希表,不允许null键null值,线程同步,效率低
Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合
HashMap:底层数据结构是哈希表,允许null键null值,线程不同步,效率高
TreeMap:底层数据结构二叉树,线程不同步,可以对Map中的键进行排序
哈希表排序的两个函数:hasCode; equals;
HashMap中的键若存入两次不同的值,后面的值会覆盖上一个值
练习:“fdqavcbsacdfs”获取该字符串中每一个字母出现的次数,要求打印结果:a(2)b(1)...