hualinux java 1.15:集合类型是怎么用的
程序员文章站
2022-07-12 17:58:38
...
我们前面介绍了类、抽象类、接口及它们的区别使用场景,现在本章介绍也是使用频率很高的集合类。
为了照顾0基础的人,简单说下集合类型是怎使用的,在哪些情况下使用。
一、集合类型图
什么是集合类型我就不讲了,直接给出一张图
List主要使用ArrayList的多:
实例化,List<类型> list= new ArrayList<>();
Set主要用HashSet多:
实例化:Set<类型> set =new HashSet<>()
Map主要用HashMap的多:
实例化:Map<类型,类型> map=new HashMap<>();
二、集合的线程安全问题
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
2.1 List,Map,Set 线程安全性
2.2 声明线程安全的集合方法
2.2.1 使用Collections. 方式构建
//make thread-safe list
List MyStrList = Collections.synchronizedList(new ArrayList());
MyStrList.add("123");
MyStrList.add("abc");
//make thread-safe hashset
Set set=Collections.synchronizedSet(new HashSet());
set.add(123);
set.add(456);
//make thread-safe hashmap
Map map=Collections.synchronizedMap(new HashMap());
map.put(1, "thb");
map.put(12, "bill tang");
2.2.2 使用ThreadLocal封装
三、什么情况下用集合类型
3.1 什么情况下适合用集合类型
我们开发的时候会遇到数据个数是动态的,还有数据类型是多样的情况,这样比较适合使用集合。
集合类型本身就是个数不固定的,所以当个数不固定的情况下可以使用集合类型。
集合类型如果保存的数据类型是多样的,那么可以使用Object类型,此类型可以代表所有类,如:List<Object>map<String,Object>、等。
ps: 在实际开发中,集合一般混合使用的的比较多
3.2 例子
如保存几个学生的信息,除了用数据库保存之外,还可以用List<Stu>,
先定义一个学生类,有学号、名字、语文成绩、数学成绩,如果你想用现成的基本数据类型基本找不到。那怎么办呢?可以选择类,这样类可以把几种类型包括起来,代码如下:
public class Stu {
//学号
private String sid;
//学生名
private String name;
//语文,不推荐用yuWen这种方式
private float chinese;
//不建议直接用shuXue这种拼音方式
private float maths;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getChinese() {
return chinese;
}
public void setChinese(float chinese) {
this.chinese = chinese;
}
public float getMaths() {
return maths;
}
public void setMaths(float maths) {
this.maths = maths;
}
@Override
// toString() 是把对象转为字符串输出,看情况添加
public String toString() {
return "Stu{" +
"sid='" + sid + '\'' +
", name='" + name + '\'' +
", chinese=" + chinese +
", maths=" + maths +
'}';
}
}
一个Stu类只能保存个学生信息,如果多个学生,数量是动态的话,可以用List类型,这样就变成了Lsit<Stu>类了,代码如下:
/**
* T为test的意思
* Stu为 student
*/
public class T2 {
private Stu saveStu(String sid,String name,float chinese,float maths)
{
Stu stu = new Stu();
stu.setSid(sid);
stu.setName(name);
stu.setChinese(chinese);
stu.setMaths(maths);
return stu;
}
public static void main(String[] args) {
T2 t2=new T2();
List<Stu> stuList =new ArrayList<>();
//创建学生1
stuList.add(t2.saveStu("001", "张三", 60f,65.5f ));
//创建学生2
stuList.add(t2.saveStu("002", "李四", 70.5f,80f ));
//创建学生3
stuList.add(t2.saveStu("003", "王五", 91f,98f ));
//写迭代器
Iterator stuListIt=stuList.iterator();
//循环输出每个学生的成绩信息
while (stuListIt.hasNext())
{
Stu stu = (Stu) stuListIt.next();
System.out.println(stu.getSid()+" "+stu.getName()+" "+stu.getChinese()+" "+stu.getMaths());
}
}
}
效果: