完善Java的一些没有的方法

本文分享了几个在Java项目中非常实用的技巧,包括获取字符串的最后一个字符、使用HashSet去除ArrayList中的重复元素、以及如何获取两个ArrayList的并集并去重。这些技巧能够帮助开发者提高代码效率和质量。

在做项目时,很多时候需要获取字符串中最后一个字符串是什么,为了方便写了一个函数,实现起来很简单,原理就是先获取字符串的长度,然后通过字符串截取获得最后一个字符。以下是代码:

public String getLastChar(String str){
        if(str==null||str.length()==0){
            return null;
        }else if(str.length()==1)
            return str;
        return str.substring(str.length()-1);
    }

在过滤ArrayList中重复的元素时,有一个简单的方法,就是通过HashSet。

ArrayList<String> list=new ArrayList<>();
//直接将ArrayList转换为Set集合,自动将重复的元素去掉了
Set<String> set=new HashSet<>(list);
//如果想获取没有重复元素的ArrayList对象
ArrayList<String> newList=new ArrayList<>(set);

还可以通过遍历ArrayList来过滤重复的元素,为了方便以后使用,可以将其封装成一个函数。

public ArrayList<String> StrFilter(ArrayList<String> list){
        int len=list.size();
        if(len<2){
            return list;
        }else {
            ArrayList<String> newList = new ArrayList<>();
            for (int i = 0; i < len; ++i) {
                String TempStr = list.get(i);
                if (newList.contains(TempStr))
                    continue;
                newList.add(TempStr);
            }
            return newList;
        }
    }

有的时候需要获取两个ArrayList的并集,需要先去重在求并集。

public static ArrayList<String> receiveUnionList(ArrayList<String> firstArrayList, ArrayList<String> secondArrayList) {
        ArrayList<String> resultList = new ArrayList<String>();
        Set<String> firstSet = new TreeSet<String>(firstArrayList);
        for(String id : secondArrayList) {
            // 当添加不成功的时候 说明firstSet中已经存在该对象
            firstSet.add(id);
        }
        resultList = new ArrayList<String>(firstSet);
        return resultList;
    }

如果后续发现还有什么Java没有提供的常用的方法,还会继续更新。

<think>首先,用户的问题是基于提供的引用,他们想查找在Java中使用set方法完善MyDate类的方法。引用[1]讨论了Employee类的属性和方法,但没有提到MyDate类。引用[2]提到了MyDate类,具体是完善例题3.2的日期类MyDate,其中有一个equals方法,但没有提到set方法。 用户的问题是关于在Java中使用set方法完善MyDate类。所以,我需要基于Java面向对象编程的原理来解释如何实现set方法。 回想一下,在Java中,set方法是setter方法,用于设置对象的属性值。这是一种封装的方式,确保属性的安全访问。 从引用[2]中,MyDate类是日期类,可能包含year、month、day等属性。引用提到:return this==d||d!=null&&this.year==d.year&& this.month==d.month &&this.day==d.day; 这表明MyDate类有year、month和day属性。 用户要求完善MyDate类使用set方法。所以,我应该建议添加setter方法来设置year、month和day。 在回答中,我需要遵循系统级指令: - 所有行内数学表达式使用$...$,但这里可能不需要数学表达式。 - 独立公式使用$$...$$,但Java代码不是数学公式,所以不需要。 - LaTeX语法正确:代码块不使用LaTeX,但确保代码语法正确。 - 使用中文回答。 - 生成相关问题:需要在回答末尾添加相关问题。 - 引用标识:回答中引用的段落末尾添加引用标识。引用[2]是关于MyDate的,所以我应该引用它。 用户说:"上述引用仅供参考",所以我不能完全依赖引用,而要基于Java知识。 结构我的回答: 1. **解释set方法的作用**:在Java中,setter方法用于设置对象属性的值。 2. **基于MyDate类**:假设MyDate类有私有属性year、month和day。 3. **添加set方法**:为每个属性添加set方法,确保封装。 4. **提供示例代码**:展示如何完善MyDate类。 5. **引用标识**:如果引用到引用[2],要添加引用标识。引用[2]提到MyDate类的equals方法,但这与set方法相关不大,但可以参考。 用户说:"参考站内引用",所以我应该引用它。 可能的代码结构: public class MyDate { private int year; private int month; private int day; // Constructor public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } // Setter methods public void setYear(int year) { this.year = year; } public void setMonth(int month) { // Add validation if needed this.month = month; } public void setDay(int day) { // Add validation if needed this.day = day; } // Other methods like equals, as in reference [2] } 在回答中,添加引用[2]。 生成相关问题:在末尾添加相关Java面向对象的问题。 回答结构清晰: - 介绍set方法。 - 展示改进代码。 - 解释代码。 - 添加引用。 - 生成相关问题。 </think>### 在Java中使用set方法完善MyDate类的实现方式 在Java面向对象编程中,使用set方法(也称为setter方法)是实现封装的关键技术。它允许安全地修改对象的私有属性,防止外部直接访问,确保数据完整性和验证逻辑。引用[2]中提到了MyDate类的实现(一个日期类,包含year、month和day属性),但未涵盖set方法的具体实现。下面我将基于Java标准实践,逐步解释如何完善MyDate类,添加set方法来设置年、月、日属性。 #### 完善MyDate类的步骤 1. **添加私有属性**:首先,在MyDate类中定义私有属性(如year、month和day),确保外部不能直接访问。 2. **实现set方法**:为每个属性创建public的setter方法。这些方法应包括参数验证(例如,确保月份在1-12之间,日期在有效范围内),以提升代码健壮性。 3. **可选添加get方法**:为了完整性,可以同时添加getter方法(getYear、getMonth、getDay),但这不属于用户提问范围,因此本回答仅聚焦于set方法。 4. **保证兼容性**:引用[2]中提到的equals方法(用于比较日期对象)可以保持原样,因为set方法不会影响已有的逻辑。 #### 示例代码 以下是一个完整的MyDate类实现,包括set方法。代码基于引用[2]的框架扩展,添加了setYear、setMonth和setDay方法,并包含简单的输入验证逻辑。 ```java /** * 日期类 MyDate,用于表示年、月、日。 * 完善示例:添加set方法实现属性封装。 */ public class MyDate { private int year; // 年份 private int month; // 月份 (1-12) private int day; // 日期 (1-31) // 构造方法:初始化对象 public MyDate(int year, int month, int day) { setYear(year); // 使用set方法确保验证 setMonth(month); setDay(day); } // 设置年份的set方法 public void setYear(int year) { if (year < 0) { // 简单验证:年份不能为负 throw new IllegalArgumentException("年份不能为负数"); } this.year = year; } // 设置月份的set方法 public void setMonth(int month) { if (month < 1 || month > 12) { // 验证月份在1-12之间 throw new IllegalArgumentException("月份必须在1到12之间"); } this.month = month; } // 设置日期的set方法 public void setDay(int day) { // 简单验证:日期根据月份调整(这里仅做基本检查,实际项目中可扩展天数验证) if (day < 1 || day > 31) { throw new IllegalArgumentException("日期必须在1到31之间"); } this.day = day; } // equals方法保持引用[2]中的逻辑(用于对象比较) public boolean equals(MyDate d) { return this == d || (d != null && this.year == d.year && this.month == d.month && this.day == d.day); } // 其他方法(如toString)可根据需要添加 } ``` #### 代码说明 - **set方法的作用**:每个set方法(如`setMonth`)通过`public`访问修饰符暴露,允许外部代码安全修改属性。例如,`setMonth`方法验证输入值是否在1-12之间,如果无效则抛出`IllegalArgumentException`异常,防止非法数据。 - **封装优势**:通过set方法,您可以添加自定义逻辑(如日期有效性检查),避免直接修改属性导致的错误,这符合面向对象设计的封装原则[^1]。 - **与构造方法集成**:在构造方法中调用set方法(如`setYear(year)`),确保对象创建时也进行验证,提升一致性。 - **兼容性**:equals方法(来自引用[2])保持不变,因为它依赖于属性值,而set方法只修改这些值,不会影响比较逻辑。 #### 使用示例 在main方法中创建MyDate对象并调用set方法: ```java public class TestMyDate { public static void main(String[] args) { MyDate date = new MyDate(2023, 1, 15); // 初始日期 System.out.println("原始日期: 2023-01-15"); // 使用set方法修改属性 date.setMonth(5); // 设置月份为5 date.setDay(20); // 设置日期为20 System.out.println("修改后日期: " + date.getYear() + "-" + date.getMonth() + "-" + date.getDay()); // 假设有get方法 // 测试验证逻辑 try { date.setMonth(13); // 非法输入,触发异常 } catch (IllegalArgumentException e) { System.out.println("错误: " + e.getMessage()); } } } ``` 在这个例子中,set方法确保了属性的安全修改,如果输入无效值(如月份13),会抛出异常提示错误,提高了代码的鲁棒性。 通过添加set方法,您完善了MyDate类的封装性,使其更符合Java面向对象规范[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值