装箱和拆箱,集合,list,set,map

Posted sw-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装箱和拆箱,集合,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(数组);




























































以上是关于装箱和拆箱,集合,list,set,map的主要内容,如果未能解决你的问题,请参考以下文章

自动装箱和拆箱

全面理解java自动装箱和拆箱(转)

再谈C#装箱和拆箱操作

深入剖析Java中的装箱和拆箱

深入剖析Java中的装箱和拆箱

深入剖析Java中的装箱和拆箱