java实训第十五天8/15

来源:互联网 发布:学c语言需要什么基础 编辑:程序博客网 时间:2024/05/15 08:14
1.集合:就是存放对象的容器
2.集合与数组的区别:
a)集合的容量可以自动扩充,只能存对象,可以存任何类型的对象,比数组要慢
b)数组容量不能改变,可以存基本类型和对象,类型必须一致,效率高
3.集合结构
a)集合的分类:
i)线性集合 :Collection
1)List :有序 重复
2)Set :无序 不重复
ii)键值对 :Map
b)层次机构
Collection Map
List Set
ArrayList  HashSet HashMap 
LinkedList  TreeSet HashTable
Vector(向量)
4.常用的问题
a)List 和 Map 的区别
  List 是线性集合
  Map 是键值对的集合
b)List和Set的区别
c)ArrayList 和LinkedList的区别:
ArrayList:基于数组,实现了List中的所有方法 ,随机访问
LinkedList:是链表结构,还添加了特有操作首尾元素的6个方法 ,插入和删除
d)ArrayList 和Vector 区别:
  ArrayList:线程不安全
Vector   :线程安全

e)要使用LinkedList中的特有 必须使用LinkedList的引用
LinkedList link=new LinkedList();
f)ArrayList 扩容 扩大原先容量的一半  容量>>1 容量/2
如果构建 集合的时候不指明容量 默认 0   初始化容量 10
如果构建 集合的时候指明 容量  初始值 就是多少
ArrayList list=new ArrayList();//0  
list.add("dd");  //10 
ArrayList list=new ArrayList(20);//20 
list.add("ddd0");
g)集合的遍历:
1)使用迭代器:只用遍历集合,是只读向下
Iterator
hasNext()
next()
Collection集合中都有iterator()
while(it.hasNext()){
Object obj=it.next();
}
2)针对于List集合
  普通的for循环 ,通过下标遍历
for(int i=0;i<xxx.size();i++){
类型 变量=(类型)xxx.get(i);
}
3)针对于泛型集合
加强的for循环 forEach  
for(泛型类 变量:xxx){

}
5.常用的方法:ArrayList
add(Object obj); 把整体添加
add(int index,Object Obj); index<=size()
addAll(Collection cols);//把一个集合中每一个元素单独添加到集合中
size()
get(int index):index<size()  2  0 1
6.去除数组中的重复数据
String[] names={};//引用类型
List<String> list=Arrays.asList(names);
Set<String> set=new HashSet();
set.addAll(list);
names=set.toArray(names);//参数names 是set转为数组用到格式


abc cd af abrf===添加到集合中

7.数据比较使用以下两种接口
Comparable:内部比较器,自己和其他本类对象比较
如果大于 返回大于 0的数字
如果小于 返回小于 0的数字
如果等于 返回 0 
必须重写 compareTo方法 在其方法内部完成比较
有局限性:因为该接口在类内部实现,如果比较的规则不满足,
只有修改类中的代码才可以
但是有些情况 类中的比较规则无法更改 String

Comparator:外部比较器,独立于类,是给 Arrays.sort()或Collections.sort()


区别:
1)位置不同:
Comparable:在类的内部完成
Comparator:在类的外部完成
2)其中方法不同
Comparable:要重写 compareTo方法  
Comparator:要重写 compare(T o1,T o2)
  equals(Object obj) :给对象相等做判断使用
3)使用方式:
Comparable:在排序的时候自动调用
    Comparator:创建实现类的对象并给sort方法做参数




ni   hao   ma?dd   hel  
使用正则表达式最简单
字符串截取
8.Map:是键值对的集合 ,key 不能重复,重复发生覆盖
a)HashMap
其中的key可以为null 有且只有一个

Entry<K,V>
9.Map 的使用:
因为Map 集合 是 键值对的集合
生活中的实体 就是 属性和值的组合
使用Map集合中的 key 模拟 实体类中的属性

public class Student{Map<String,String> 
String name="张三";map.put("name","张三");
int age=23; map.put("age","23");
map.put("","");
}
使用Map集合的对象 装载一个实体类的对象










练习:
一.分别统计一个字符串中每一个字符出现的次数
并显示

a:2 
b:2
使用Map集合实现
Map<String,Integer> map=null;
String str="abcdafbedfhj";
for(int i=0;i<str.length();i++){
String n=str.substring(i,i+1);
Integer m=map.get(n);//那着每一字符 去找作为 key 对应的value
if(m==null){
map.put(n,1);//该字符第一次出现
}else{
map.put(n,m+1);//该字符次数+1 后 覆盖原有的次数
}
}
//判断 a - z 在字符串中出现的次数