java集合框架

集合框架

定义

集合与数组类似,只不过集合中的数据量可以动态的变化。

List、Set集合属于单列集合

Map属于双列集合

1.List集合

==定义:==存放的数据可重复,并且有顺序

1.1 ArrayList
(1)容器的创建

ArrayList aList = new ArrayList();

注意

只装Object数据类型

(2)add()方法

向ArrayList集合中添加数据

aList.add(8);

aList.add(“终稿”);

aList.add(true);

aList.add(‘c’);

Object是所有类的超类,基本数据类型的包装类的父类都是Object。

(3)get()方法

获取ArrayList集合中某一个数

aList.get(index);

注意

因为Object是所有基本数据类型的父类,当已知其中一个数的数据类型时,接收该数据时,需要使用强制数据类型转换。

例如:String str = aList.get(2);

应为: String str = (String)aList.get(2) ;

(4)remove()方法

根据下标来删除指定的数据,返回删除的元素

aList.remove(2);

aList.clear(); 把集合全清空,慎用

(5)set()方法

修改集合中的元素

aList.set(index ,Object);

(6)计算List集合的长度

int len = aList.size();

(7) 检测集合中是否包含某元素

其方法的返回值为布尔类型,方法为判断指定数据在ArrayList集合中是否存在

Boolean flag = aList.contains("");

1.2 LinkedList

LinkedList bList = new LinkedList ();

方法同ArrayList。

1.3 泛型

==定义:==指定集合等中存放的具体数据类型。

ArrayList aList = new ArrayList();

List aList = new ArrayList();

例如:

List<Integer> aList = new ArrayList<Integer>();aList.add(1);aList.add(2);aList.add(3);

以上代码可简化为

List<Integer> aList = Array.asList(1,2,3);

Array.asList(T… a); List–java.util.Arrays

1.4 区别

ArrayList 与 LinkedList的区别(重):

1)ArrayList 底层是数组,而且是Object[];LinkedList 底层是链表。

2)ArrayList 查询数据很快,但是增删改查很慢;LinkedList 增删数据很快,但是查询数据较慢。add()方法用较多,使用LinkList,get()方法用较多,使用ArrayList。

2.Set集合

==定义:==存放的数据不能重复,无序

2.1 HashSet

底层是哈希表

(1)创建HashSet对象

HashSet aSet = new HashSet();

(2)add()方法

增加数据

aSet.add("孙五点");

aSet.add("孙悟空");

aSet.add("孙五点");

打印结果为:

孙五点 孙悟空

因为Set集合不能存放重复数据,当存放相同数据时打印时仍打印一次,且打印结果没有顺序。

(3)remove()方法

删除数据

boolean flag = aSet.remove("孙悟空");

List数组底层实现是数组所以根据下标删除,Set因为无序所以直接删除指定元素即可。

(4)修改数据

需要先删除再添加

aSet.remove("孙悟空");aSet.add("唐僧");

(5) contains()方法

查询HashSet集合中是否存在指定的数据

boolean flag = aSet.contains("唐僧");

(6)计算HashSet集合中的数据条数

int len = aSet.size();

2.2 TreeSet

底层是二叉树

3.Map集合

键值对

3.1 HashMap
(1)容器的创建

HashMap()构造方法

HashMap<Integer,String> aMap = new HashMap<Integer,String>();

(2)put()方法

添加数据(key-value):

key值必须唯一,不能够重复,如果重复,后者会覆盖前者。

aMap.put(1,"张三");aMap.put(2,"张五");aMap.put(3,"张六");

针对无参的构造方法,初始化创建16个空间,一旦超出默认加载因子为0.75;即28个空间,依次计算。

(3)打印结果

因为HashMap覆盖toString()方法,所以可以直接打印。

打印结果是无序的。

system.out.println(aMap);

(4)删除

删除是根据key值,因为具有唯一性,同时返回值为value所对应的数据类型,返回的为value值

aMap.remove(1);

String value = aMap.remove(3);

(5) 修改

覆盖原理,用put()方法即可

aMap.put(2,"刘三");

(6)查询

根据key值获取value值

String value = aMap.get(2);sout("aMap.get(2)="+value);

指定value值在HashMap中是否存在,返回为布尔值

Boolean flag = aMap.containsValue("王五");

对HashMap集合进行遍历

forEach循环可以直接对List集合、Set集合、数组进行直接遍历,但是不可以对Map集合遍历。

思路:

1)将Map类型转化为Set类型即可以实现遍历。

2)将一条数据key 和 value 键值对按一条条目存放,即Entry类型。

操作:

1.1 aMap.entrySet(): Set<Entry<Integer,String>> 方法

Set<Entry<Integer,String>> entrySet = aMap.entrySet();

1.2

for(Entry<Integer,String> temp :entrySet){sout(temp);}

打印结果:2=刘三 //通过等号分割key value值

补充:改变分隔符

Set<Entry<Integer,String>> entrySet = aMap.entrySet();

for(Entry<Integer,String> temp :entrySet){Integer key= temp.getKey(); String value = temp.getValue();sout(key+":"+value);}

可简化为:

for(Entry<Integer,String> temp :aMap.entrySet()){sout(temp.getKey()+":"+temp.getValue());}

思想:temp获取变量,变量由条目组成,条目有相关方法可以获取到key 和 value的值,打印时候分开打印中间即可添加不同分隔符。

3.2 TreeMap
3.3 Hashtable(过时)
补充
可变参数

(int…attr)int类型参数的个数是从0~N

底层实现依旧是数组,遍历数组方法遍历即可,例如forEach遍历。

注意

当函数传参时,有多个不同类型和可变参数时候,可变参数必须放在最后。

例如

public static void demo(float f,String str,int…attr){}

Junit测试

方便测试代码

1.新建测试包 cn.java.junit

2.在方法上加注解 @Test

3.引入Add JUnit 4 library to the build path,即导入import org.junit.Text;

注意

1)方法名和类名不能叫Test

2)函数应该为实例方法不能有返回值 public void test1(){}

3)通过Junit测试的方法,不能有返回值、不能写形参,访问修饰符使用public修饰

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值