javaList笔记

JAVA-leetcode

leetcode-三数之和

img

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
       List<List<Integer>> list = new ArrayList<>();
        if (nums.length<3) return list;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]>0)
                break;
            if (i>0&&nums[i]==nums[i-1]) continue;//确定每一个遍历的i的num值不重复。
            int left = i +1;
            int right = nums.length-1;
            while (left<right) {
                if (nums[i]+ nums[left]+ nums[right] == 0) {
                    list.add(Arrays.asList(nums[i], nums[left],nums[right]));
                    while (left<right&&nums[left]==nums[left+1]) left++;//确定双指针
                    // 对应的num不重复。
                    while (left<right&&nums[right]==nums[right-1]) right--;
                    left++;
                    right--;
                }
                else if (nums[i]+ nums[left]+ nums[right]>0)
                    right--;
                else
                    left++;
            }
        }
        return list;

    }
}

这是一个例子:

public class Demo{
	public static void main(String[] args){
		List list = new ArrayList(); 
        ArrayList arrayList = new ArrayList();
        list.trimToSize();//错误,没有该方法。
        arrayList.trimToSize();//ArrayList里有该方法。
    } 
}
编译一下就知道结果了。

img

可以看到List接口中并没有trimToSize()方法,但这个方法在它的实现类ArrayList中有。因此编译的结果为:
List a=new ArrayList();

则a拥有List的所有属性和方法,不会拥有其实现类ArrayList的独有的属性和方法。 如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()), 则a.i是调用了List中的i,a.f()是调用了ArrayList中的f();


为什么要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
问题就在于List接口有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了: List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了ArrayList实现类特有的方法和属性。

设计模式的原则和理念果然是强大的,只有好好学习了面向对象原则和设计模式,那么理解上面的就不再是难度,这样的好处是为了代码的可维护性,可复用性,可扩展性以及灵活性,再者就是这符合了里氏代换原则和开闭原则。看来学习设计模式好处是大大的。

posted @ 2023-02-06 15:41  Indullged  阅读(14)  评论(0编辑  收藏  举报