java集合类详解和使用_Java 集合类详解

今天来看看“集合类”的概念。

集合可以看作是一个容器,比如,所有Java有关的书都可以看作是一个集合。对于集合中的各个对象很容易将其存放到集合中,也很容易将其从集合中取出来,还可以按照一定的顺序将其摆放。Java中提供了不同的集合类,这些集合类具有不同的存储对象的方式,并提供了相应的方法以方便用户对集合进行遍历,添加,删除,以及查找指定的对象。

集合类又被称作容器,提到容器大家很自然地就想到了数组,那么集合类和数组有哪些不同之处呢?首先,数组的长度是固定的,而集合的长度是可变的;其次,数组用来存放基本的数据类型,而集合用来存放对象的引用。常用的集合主要分为两大类,Map类和Collection类,Collection类又包括Set类和List类,它们之间的继承关系可以用下面的图来表示:

68bfdf3476ef0c6acd06a67b23f67ce1.gif

Collection接口是层次结构中的根接口,其构成单位称为元素。Collection接口通常不能直接使用,但提供了添加元素,删除元素,管理数据的方法。从上面的继承图可以看出,Set和List类继承了Collection接口,因此这些方法对Set和List类也是通用的。那么,接下来,我们看看Collection类的常用方法。

Collection集合的常用方法主要有以下几种:

boolean add(Object element); 向集合中添加元素

void clear(); 清空集合

boolean contains(Object o);  判断集合中是否包含某元素

boolean isEmpty();   判断集合中是否有元素

Iterator iterator();  获取集合所依赖的迭代器对象

boolean remove(Object o);   删除集合中某个元素

int size();  获取集合中元素的个数

Object[] toArray();  将集合转换成数组

接下来我们看这些方法的使用。看以下程序:

import java.util.*;

public class CollectionTest01{

public static void main(String[] args){

//1.创建集合

Collection c=new ArrayList();

//2.添加元素

c.add(1);

c.add(new Integer(100));

c.add(new Object());

Customer cus=new Customer("JACK",20);

//3.获取元素的个数

System.out.println(c.size()); //4

System.out.println(c.isEmpty()); //false

//4.将集合转换成Object类型的数组

Object[] objs=c.toArray();

for(int i=0;i

System.out.println(objs[i]);

}

//5.清空

c.clear();

System.out.println(c.size()); //0

//6.判断集合是否为空

System.out.println(c.isEmpty()); //true

}

}

class Customer{

String name;

int age;

Customer(String name,int age){

this.name=name;

this.age=age;

}

//重写Object中的toString方法

public String toString(){

return "Customer[name="+name+",age="+age+"]";

}

}

编译后运行输出:

3

false

1

100

java.lang.Object@15db9742

0

true

上述代码中,

1.创建集合,这里注意,因为Collection是一个接口,所以不能直接Collection c=new Collection(); 我们可以寻找它下面的一个实现类(参考上面的继承类的图)ArrayList,即Collection c=new ArrayList();

2.添加元素, c.add(1);这里用到了自动装箱的知识,忘记了的翻到前面看一看啊,c.add(new Object());相当于Object o=new Object(); c.add(o);也就是说Collection只能存储引用类型。之后我们自己给定一个其他类型Customer,并且重写Object中的toString()方法,然后在main()方法中添加元素c.add(cus);

3.获取元素的个数,使用c.size();

4. 将集合转换成Object类型的数组,使用的方法为toArray(); 之后使用for循环进行遍历;输出为

1

100

java.lang.Object@15db9742

0

5.清空集合,使用c.clear(); 然后再次获取元素个数之后会发现System.out.println(c.size());输出为0;

6.中间我们穿插了c.isEmpty(); 即判断集合是否为空;

接下来我们看看迭代器iterator()方法。看以下代码:

import java.util.*;

public class CollectionTest02{

public static void main(String[] args){

//创建集合对象

Collection c=new LinkedList();

//添加元素

c.add(100);

c.add(3.14);

c.add(false);

//迭代,遍历

//1.获取迭代器对象

Iterator it=c.iterator();

//2.开始调用方法,完成遍历,迭代

while(it.hasNext()){

Object element=it.next();

System.out.println(element);

}

/* //或者使用for循环

for(Iterator it=c.iterator();it.hasNext();){

Object o=it.next();

System.out.println(o);

} */

}

}

在上述代码中,

1.获取迭代器对象,已经创建了集合对象c,进行迭代时直接调用iterator()方法,也就是说,迭代器=c.iterator(); 这里c可能为ArrayList,HashSet,LinkedList各种集合对象,这样调用iterator()就实现了不同的迭代器,但是所有的迭代器都实现了Iterator接口,所以可以直接Iterator it=c.iterator();也就是说迭代器是直接面向接口编程,看不出具体的实现类,it是引用,保存了内存地址,指向堆中的迭代器对象。

2.开始调用方法,完成遍历,迭代

迭代器Iterator里面有三个方法,hasNext()判断迭代器里面是否有更多的元素,如果有,返回true,否则返回false; next()方法将迭代器向下移动一位,并且取出指向的元素,但要注意,调用next()方法之前,为了防止出现问题,必须先调用hasNext()方法判断是否还有元素。这里介绍了while和for循环两种遍历方式。

好了,今天的内容讲到这里,如果觉得有用,欢迎分享给更多人!

68bfdf3476ef0c6acd06a67b23f67ce1.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java计算两个日期之间相差天数可以使用Java 8中的新时间API解决。以下是计算相隔天数的示例代码: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class DateUtils { public static long getDaysBetweenDates(LocalDate startDate, LocalDate endDate) { return ChronoUnit.DAYS.between(startDate, endDate); } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 9, 1); LocalDate endDate = LocalDate.of(2021, 9, 20); long daysBetweenDates = getDaysBetweenDates(startDate, endDate); System.out.println("相隔天数:" + daysBetweenDates); } } ``` 运行上述代码,将会输出:相隔天数:19 需要注意的是,Java 8中的新时间API LocalDate类的实例是不可变的,因此计算相隔天数时不会改变原始日期对象。 如果你需要计算两个日期之间相差的工作日(不包括周末和节假日),可以使用第三方库jollyday来实现。你可以在项目中添加以下依赖项: ```xml <dependency> <groupId>de.jollyday</groupId> <artifactId>jollyday</artifactId> <version>0.5.9</version> </dependency> ``` 然后,使用以下代码计算相隔工作日数量: ```java import de.jollyday.HolidayCalendar; import de.jollyday.HolidayManager; import java.time.LocalDate; import java.util.HashSet; import java.util.Set; public class DateUtils { public static long getWorkingDaysBetweenDates(LocalDate startDate, LocalDate endDate) { Set<LocalDate> holidays = getHolidays(startDate, endDate); long daysBetween = startDate.datesUntil(endDate).count(); long workingDays = 0; for (int i = 0; i < daysBetween; i++) { LocalDate date = startDate.plusDays(i); if (isWorkingDay(date) && !holidays.contains(date)) { workingDays++; } } return workingDays; } private static Set<LocalDate> getHolidays(LocalDate startDate, LocalDate endDate) { HolidayManager holidayManager = HolidayManager.getInstance(HolidayCalendar.CHINA); Set<LocalDate> holidays = new HashSet<>(); for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1)) { if (holidayManager.isHoliday(date)) { holidays.add(date); } } return holidays; } private static boolean isWorkingDay(LocalDate date) { return date.getDayOfWeek().getValue() <= 5; } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 9, 1); LocalDate endDate = LocalDate.of(2021, 9, 20); long workingDaysBetweenDates = getWorkingDaysBetweenDates(startDate, endDate); System.out.println("相隔工作日:" + workingDaysBetweenDates); } } ``` 运行上述代码,将会输出:相隔工作日:14 在上述示例代码中,我们使用了HolidayManager类和HolidayCalendar枚举来获取指定日期范围内的节假日。然后,我们使用isWorkingDay方法来检查日期是否为工作日,并使用Set集合来保存所有节假日。最后,我们遍历日期范围内的每一天,并使用isWorkingDay和holidays集合来计算相隔工作日的数量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值