集合框架


1、什么是框架?--感性认识
【备注】: 图中 虚线为接口 实线为类 加粗为常用集合类;
collections:集合操作工具类 arrays:数组操作工具类;
collection: 是所有集合框架的根接口;(list【列表】、set【集】都是其的直接衍生;Map【映射】是间接衍生) 实现这些操作要去操作他们的具体实现类【Arraylist / linkedlist / hashset / HashMap / TreeMap】

**使用集合框架对象装数据【之ArrayList,LinkedList--专门替代数组的】
1、两者和superArray具备相同的功能的封装;
2、方法研究 clear、 isEmpty 、contains、
3、ArrayList,在底层数据存储上使用的是数组形式,完成的还是对数组的封装;
LinkedList,在每个元素的前面增加指向上一个元素的地址;后面增加一个下一个元素的地址;在底层已经没有采用数组的存储形式了;
因此:在查找中(get动作)使用ArrayList的效率高;
在大量 增加尾部 数据中使用ArrayList的效率高;
在大量删除,减少,增加中使用LinkedList效率高;
内存存放的区别【图】:

//产生集合类的对象
Arraylist 1st = new ArrayList();
//使用结合类对象
//1、放入元素
1st.add("hello");
1st.add( new Date() );
1st.add( 10 );
//2、得到放了多少个元素
int flag = 1st.size();
//3、可以根据位置获取某个元素
打印(1st.get(0 - 1st.lenght ))
//4、可以根据位置修改某个元素
1st.set(3 , 250 )
打印(1st.get(3))
//5、可以根据位置删除某个元素
1st.remove(3 , 250 )
打印(1st.get(3)
//6、对list进行遍历:
①普通for循环; 有下标使用优势; 下面两个方式都没有下标;
②for-each遍历; for(Object obj : 1st ){
打印obj;
}
集合类专用方式:迭代器(Interator) // jdk 1.5之后就都使用for-each了;
Interator it = 1st.interator() ; //获得1st所有对象到迭代器中 it;
while(it.hasNext()){
Object obj = it.next();
打印obj;
}

**使用集合框架对象装数据【之set】
/* Set: 集,用的最少的集合;重复项自然而然被排除;
** 特点: 不能存放重复元素(彩球放入)无序--外部放入的顺序不是内部存放的顺序,所以没有 下标

**常用子类: HashSet ; 可以使用泛型,泛型可以使用指定类型数据和其子类;
【为何将HashSet能判断两个对象是否重复】- -重写要写在对象的方法中的;
1、重写了equals
public boolean equals(Object arg0){
if(arg0 instanceof Student){
Student stu = (Student)arg0;
if( this.name.equals( stu.getName() ) &&
this.age == stu.getAge() &&
this.secore == stu.getsceore() ){
return true;
}
}
return flase;
}
2、重写了hashCode;
public int hashCode(){
int hashCode = 0 ;
char[] array = this.name.toCharArray();
for( int i = 0 ; i < array.length ; i++ ){
hashCode += array[i];
}
hashCode += array.length + this.age + this.secore ;
return hashCode;
}
//首先产生集合对象
HashSet<> set = new HashSet<>();
//使用上:
1、添加上一样
2、得到元素个数 set.size();
3、不可以根据位置获取某个元素【没有下标】
4、不可以修改某个位置的元素:【没有下标】
5、不可以根据位置来删除元素;【没有下标】
6、可以根据传入的对象删除Set集合中的重复对象; set.remove(元素对象);
7、 只能for-each或者迭代器Itertor遍历的方式;




**使用集合框架对象装数据【之Map--映射】
**特点:1、键值对 key-valce 队的方式保存数据---数据是成对存放的,每个元素除了有值还有一个唯一的键需要定义;
** 2、常用子类: HashMap、Properties;

//首先产生集合对象
HashMap map = new HashMap();
HashMap<K,V> map = new HashMap<K,V>();

//使用:
1、放入元素:
map。put(1,“hello”) 创建值是“hello” 键是1的第一个对象;
map。put(“hello“,5) 创建了值为5,键为”hello“的第二个对象;
2、得到元素个数
map。size();
3、取数据--要根据键来获取
map.get(1) / map.get("hello")
4、修改元素--调用PUT,方法,需要放入相同的键;
map.put( 1,new Date() );
5、删除元素--调用remove,根据键进行删除;
map.remove("1") ;
///在获取和删除元素中传入的键不存在,不会报错, 危险!!
///在修改元素的时候,如何传入键在map中不存在,就直接变成增加新元素, 危险!!
首先要多判断 map.containsKey(“1”); 基本数据类型可以直接判断; 但是如果是 自定义类做键 ,那么就要重写equals和 hashCode方法;
一般使用时间来做键 / / String来做键;
6、对Map进行遍历
(一)、键遍历
1、Map不能直接遍历--因为Map里的每一条记录都是一对,无法用变量来装;
2、Map只能遍历所有的键或者所有的值;
Set keySet = map.keySet( ); //把map中所有的键取出来放在一个Set集合中;
特别注意:map有申明泛型为String类型,则keySet必须使用泛型为String;
不放在list的原因:1.无序特点; 2、不重复;
然后for-each遍历 keySet
(二)、值遍历:
1、存放在Collection中;(刻意重复--set,无序--list)
Collection values = map.values();
特别注意:map有申明泛型为String类型,则keySet必须使用泛型为String;
然后使用 for-each遍历(包含迭代器);


三、Collections:
resort 自动排序
reverse: 反转
binarySearch:二分法搜索(必须是按大小顺序排列好的)
max、min
//跟排序有关的方法:---只能操作list集合;
在集合中的泛型只能是类的类型;不能是基本数据类型,使用基本数据类型可以是用包装类
1、自然排序:Collections.sort( 集合 ) ; 从小到大;
反转排序:Collections.reverse(集合);
浑牌排序:Collections.shuffle(集合):

2、显示结果:
for(集合类型 in :集合 ){
System.out.println( in );
}
3、Compare:
功能:比较器//定义排序规则,String实现了其接口;
实现接口,,



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值