Java 集合框架

集合框架(JCF---JAVA Collection Framework):
1.什么是框架
2.集合分类:
1>.List
2>.Set
3>.Map
---------------各自的特点,分清什么时候用哪一个。
---------------语法:集合的基本操作(放数据,取数据,删数据,改数据,遍历)
1.泛型
2.迭代器
3.hashCode()的使用
3.集合的工具类
---------------比较器

********************************************************************************************
集合特点:元素类型可以不用,长度可变,空间位置不固定
框架:
定义:为了解决某一个问题,而预先设计的一系列具有继承或实现关系的类与接口。在使用
中,我们只需要从这些类与接口中选择相应的进行操作 ,就可以完成功能。
Collection : 是接口,是根接口(或核心接口)
Collections:是类,是工具类(操作集合)
集合框架中分为2种API:
1.装载数据的集合类。
2.操作数据的工具类。
List(列表):
---直接继承Collection(直接衍生)
特点:线性(有序---→有下标),外部放入的顺序即为列表存的顺序。
所以有下标。
常用子类:ArrayList / LinkedList
ArrayList:底层实现就是使用的数组,它完成对数组的封装。
对ArrayList遍历:
1.普通for循环。2.for---each循环----JDK1.5之后才有
3.迭代器(Iterator)----集合框架专用遍历
迭代器:Iterator it=lst.Iterator(); //1.将lst中的数据导入到it中
while(it.hasNext()){ // 2.判断是否有下一个元素。
Object obj=it.next();
System.out.println(obj);
}
LinkedList : 与ArrayList--API几乎全部相同,底层实现采用的是双向链表的方式。
两个的区别:
1. 如果需要在集合中做大量的get动作的时候,ArrayList效率高于LinkedList。
2. 往尾部添加或者删除元素,仍然是ArrayList效率高于LinkedList。
3. 往中间添加或者删除元素,LinkedList效率高于ArrayList。
面试辨析:
ArrayList 与 Vector
Vector同样是List分支下面的集合类,底层使用的数据结构仍然是数组。API也
几乎是一套。
差异:
1. ArrayList 是线程不安全的,效率高的。
2. Vector是线程安全的,效率低的。(一般用于多线程且可能出现线程安全性问
题的时候)
<类型 >:泛型:表示该集合只能存放该类型及其子类的元素。
集合中的泛型不能写基本数据类型(写Integer)。
eg: LinkedList<Student> stuList= new LinkedList<Student>() ;
-------------------------------------------------------------------------------------------------------
Set (集 ):
---直接继承Collection(直接衍生)
特点:1. 元素不能重复 2. 无序:外部放入的顺序不是内部存放的顺序,所以没有下标
最常用子类:HashSet
1.产生对象
HashSet set =new HashSet( ); // 泛型可加可不加--同上
2.放入数据
set.add(Object obj); // 所有都可以放
3.得到元素个数
set.size( ); //如果重复了,只会算一个在集里面
4.不可以根据位置获得元素
set.get(); //所有与下标有关的方法都不可以用
5.不可以修改某个位置的元素
6.不可以删除某个位置的元素
7.可以根据传入的对象删除set集合中的重复对象:
set.remove(对象); //传的是对象!
----HashSet是如何判断两个对象是重复的。
1.两个对象的equals判断必须返回true。
2.两个对象的Hash值必须相等。
----equals 判断业务上是否相等。
----hashcode 是判断内存上是否相等
8.获取set集合中的元素,只能使用遍历的方式
只能使用 for -each 或者 迭代器
--------------------------------------------------------------------------------------------------------
Map(映射):
---不直接继承Collection(间接衍生)
特点:键-值 对(K-V 对)
用键值对的方式保存数据,数据在map集合中是成对存放的。
每个元素除了有值,还有一个唯一的键需要我们定义。
最常用子类:HashMap、Properties
HashMap<K , V> -----如过K,V不填,则两个都允许是Object的。
1.使用集合类对象
2.放入元素
map.put( 键 , 值 );
3.得到元素个数
map.size( );
4.取数据----要根据键获取值
map.get( Object argO) ; -------根据泛型而定
5.修改元素---仍然调用put方法,只需要放入相同的键
map.put( 键 , 想要修改为的对象);
6.删除元素。调用remove,根据键进行删除
map.remove( 键 ) ;
在获取元素、删除元素的时候,如果传入的键在map中不存在,不会报错。
--------这是危险的。
同样在修改元素的时候,如果传入的键在map中不存在,就直接变成增加
新元素了。--------也是危险操作
解决方案: 1. 利用map.containsKey( 键 ) ;
判断map集合是否存在某个键。
2. 利用map.containsValue( 值 ) ;
判断map集合是否存在某个键。
判断的标准:
-----------------------也是先判断equals ,然后再判断HashCode
------------------系统提供的包装类,常用类一般都写了。
------------------如果自己定义的做键或者做值,则需要对这两个方
法进行重写。
7. 对map进行遍历
1>. map不能直接遍历。-----map里的每一条记录都是一对,我们无法用一个
变量来装。
2>. map只能单独遍历所有的键或者所有的值。
map.keySet( ); 把map中 所有的键取出来放到一个 Set集合中。
泛型按照泛型相关进行处理。
-----------只能用for-each 或者 迭代器。
map.values( ); 把map中 所有的值取出来放到一个 Collection集合中。
泛型按照泛型相关进行处理。
-----------只能用for-each 或者 迭代器。
--------------------------------------------------------------------------------------------------------
Collections工具类:
常用方法:
1.max( ) ,min();
2.跟排序有有关的方法-----只能操做List集合。
1>.自然排序。
Collections.sort( List ); -------传入List------- 从小到大
从大到小:
2>.反转: Collections.reverse( List );
3>.混排(随机排放)
Collections.shuffle( List ); --------每次排序都不一样(洗牌效果)
---------String 以字典顺序
比较器:
1.内部:comparable
compareTo方法中的 大于小于等于是指代的是位置的大小,如果在前面应该
是返回负整数 ,如果在后面返回的是正整数
2.外部:comparator
1>新建一个类 实现comparator接口的compareTo方法
2>则运用Collections.sort( List ,new 一个上面的对象 );
备注:实现的时候,如果是String类型等的,已经有比较方法的、
但是需要反过来的时候,可以活用String类型的compareTo)重
写的时候返回相反的值即可。
--------------------------------------------------------------------------------------------------------
Properties---类:
特点:1.就是一个Map集合类。
2.Properties可以直接操作属性文件。
----操作属性文件的时候,key和value都是String。
----可以写入文件,也可以读出文件。(这里的文件为属性文件)

Properties props=new Properties();
props.setProperty(String ,String); -----
//写入文件
props.store(new FileOutputStream("E:/lianxi.properties") , "写入注释" );
选择书写
注意: 1.如果文件不存在,会产生一个新的文件,不会报错
2.如果文件存在,会把源文件覆盖掉----每次都是整体覆盖
//读文件
props.load( new FileInputStream("E:/lianxi.properties"));
注意: 1.必须保证文件路径和名字填写正确,否则会报异常。就算try-catch
也只能解决程序不死,还是读不了数据。
----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值