装箱和拆箱,集合,list,set,map
说道集合不得不说道数组,用来存储一组相同的数据,但是对于数组来说,频繁的增减程序效率太差,只能够从一个数组扩充到另一个数组,
而且由于是连续分布查找效率低下,所有对于今后的存储一般使用集合;
集合分为collection 和map接口;
其中collection接口有有子接口:list和set;
在集合中存储的数据是一组对象,可以是任意一种引用数据类型,没有数组只能存储一组数据类型的限制;
1、装箱和拆箱
对于8种基本数据类型,想要存储到集合中需要转换为包换类;
byte, short ,int ,long ,float, double, boolean, char
对于它们的包装类分别为:
Byte, Short, Integer, Long, Float, Double , Boolean, Character;
a. 装箱
将8种基本类型转换为转换为包装类,可以用语法:对应的包装类.valueOf(基本类型数据)进行转换;字符串形式也可以;
注意虽然基本数据类型转为包装类,如果没有使用new进行构造方法转换,-128-127的数据是在常量池里面,得到的数据地址仍然相等。
b. 拆箱
将包装类转换为基本数据类型;
使用语法:包装类对象. 基本类型value()
如果是字符串可以使用:parse.基本类型(字符串),转换为基本类型
现在大多数的转型都可以进行自动拆箱装箱,不用进行手动转换。(——注意数组类型不可以自动转换为包装类的数组类型,所有以后使用数组类型应用包装类的数组类型。)
1、list
list数组存放的是有序、不唯一的对象;
list接口的实现类是:arraylist和linklist
a、 arraylist:
特点:不同步,线程不安全,性能好;对于存取适用,查找快,但不利于增删;
可使用普通for,增强for和迭代器循环遍历数组元素;
如果需要在遍历时进行增删操作,应该使用iterator迭代器;
使用实例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class a1 {
public static void main(String[] args) {
List l=new ArrayList<>();
l.add("aa");
l.add("bb");
l.add("cc");
Iterator it=l.iterator();
while (it.hasNext()) {
String str = (String) it.next();//一个循环中一般只能出现一次next
if(str.equals("bb")){
it.remove();
continue;
}
System.out.println(str);
}
System.out.println(l);
}
}
结果:
aa
cc
[aa, cc]
另外:list还有一种迭代器:listiterator,可以向前(previous)和向后取值;
b. linklist
链表集合,有序(指的是存入和取出的顺序一致)不唯一;
特点:增删方便,线程不安全,由于每一次查找都要从头到尾查找,所以查找效率低;
可以使用:普通for,增强for,iterator,进行遍历循环;
2、 set
set集合中可以存储无序、唯一的对象;
实现的子类是:hashset;
只能存储一个null;
如果需要对于一个对象中的某一个属性作为唯一的值,需要进行equals和hashcode重写;
遍历循环:增强for、iterator;
主要方法:add()增,remove()删,contain()是否包含某一元素;
3、 map
map集合中存储的是一组键值对key和value,它们是一一对应的关系;
key值是唯一的,不能有重复,而value是可以重复的值;
所以map是由set和list组成;
map的实现子类是:hashmap
使用方法有:put()添加键值对,get()通过键来获取值;
有三种视图:
a、 keyset():获取所以的map键,返回set集合;
b、 values():获取所以的值,返回collection;
c、 entryset();键值集,获取键值对;
使用实例:
导入包:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
代码:
public static void main(String[] args) {
Map<String, String> map=new HashMap<>();
map.put("a", "张三");
map.put("b", "李四");
map.put("c", "王五");
//使用键集遍历;
System.out.println("键集遍历:");
for (String string : map.keySet()) {
System.out.println("键:"+string+"值:"+map.get(string));
}
System.out.println("值集遍历:");
for (String string : map.keySet()) {
System.out.println("值:"+map.get(string));//不能通过值来获得键
}
System.out.println("键值对遍历:");
Set<Entry<String, String>> entrys = map.entrySet();
for (Entry<String, String> entry : entrys) {
System.out.println("键:"+entry.getKey()+"值"+entry.getValue());
}
System.out.println("直接输出map:"+map);
}
}
输出:
键集遍历:
键:a值:张三
键:b值:李四
键:c值:王五
值集遍历:
值:张三
值:李四
值:王五
键值对遍历:
键:a值张三
键:b值李四
键:c值王五
直接输出map:{a=张三, b=李四, c=王五}
当然:也可以使用iterator遍历输出;
如何进行数组和集合之间的转换:
a、集合到数组:toArray()方法;
b、数组到集合:Arrays.asList(数组);