Java编程思想第十一章"持有对象"的11.5~11.9小节的笔记和练习题

Java之——实现对文件进行MD5加密 public class MD5Utils {/***/protected static char hexDigits[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ };protected static MessageDigest messagedigest = null;static {try {messagedigest = MessageDigest.getInstance(“M 阅读详情

    11.5 List
    有两种类型的List:
    ①、ArrayList:擅长随机访问元素,但在List中间插入和移除元素较慢。
    ②、LinkedList:在List中间进行插入和删除操作的代价较低,优化的顺序访问,随机访问较慢,特性集比ArrayList大。
    书中的代码就不贴在这里了,然后书中介绍了常用的API,需要的话可以自行去查帮助文档。
    有几个方法我没用过或很少用,在这里特别记录一下:
    ①、List<E> subList(int fromIndex, int toIndex):返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。
    示例代码:
Integer[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 实例化一个list,并获取其一个子集
List<Integer> list = new ArrayList<Integer>(Arrays.asList(a));
List<Integer> subList = list.subList(2, 5); // [2,5)
System.out.println("original list:" + list);
System.out.println("original subList:" + subList);
// 子集的索引从0开始
System.out.println("subList get(0):" + subList.get(0));
// 在子集中增、删、改、清空均会影响到父集
System.out.println("----------subList remove----------");
subList.remove(0);
System.out.println("original list:" + list);
System.out.println("subList remove(0):" + subList);
System.out.println("----------subList add----------");
subList.add(10);
System.out.println("original list:" + list);
System.out.println("subList add(10):" + subList);
System.out.println("----------subList set----------");
subList.set(0, 20);
System.out.println("original list:" + list);
System.out.println("subList set(0, 20):" + subList);
System.out.println("----------subList clear----------");
subList.clear();
System.out.println("original list:" + list);
System.out.println("subList clear():" + subList);

运行结果如下:
original list:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
original subList:[2, 3, 4]
subList get(0):2
----------subList remove----------
original list:[0, 1, 3, 4, 5, 6, 7, 8, 9]
subList remove(0):[3, 4]
----------subList add----------
original list:[0, 1, 3, 4, 10, 5, 6, 7, 8, 9]
subList add(10):[3, 4, 10]
----------subList set----------
original list:[0, 1, 20, 4, 10, 5, 6, 7, 8, 9]
subList set(0, 20):[20, 4, 10]
----------subList clear----------
original list:[0, 1, 5, 6, 7, 8, 9]
subList clear():[]

    对父集list进行了某些结构性的修改,比如add()、remove()等导致modCount的值改变,则再调用子集subList的某些方法,如:set()、get()、size()等方法会抛出异常java.util.ConcurrentModificationException(子集方法中调用了checkForComodification()方法,该方法会检查父集list的modCount与创建子集subList时的modCount是否相等)。
    示例代码:
Integer[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 实例化一个list,并获取其一个子集
List<Integer> list = new ArrayList<Integer>(Arrays.asList(a));
List<Integer> subList = list.subList(2, 5); // [2,5)
System.out.println("original list:" + list);
System.out.println("original subList:" + subList);
list.remove(0);
// 子集的索引从0开始
System.out.println("subList get(0):" + subList.get(0));

运行结果如下:
original list:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
original subList:[2, 3, 4]
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1239)
    at java.util.ArrayList$SubList.get(ArrayList.java:1043)
    at com.example.test.container.Test.main(Test.java:23)

    备注:subList()方法返回的是ArrayList的内部类SubList。其和ArrayList是两个独立的个体,无法强转为ArrayList(我之前好像犯过这个错误!)。

    ②、public static void shuffle(List<?> list):使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。
    public static void shuffle(List<?> list, Random rnd):使用指定的随机源对指定列表进行置换。所有置换发生的可能性都是相等的,假定随机源是公平的。
    这是我在帮助文档中看到的解释,但是我觉得看得不太明白。其实,shuffle()方法就是打乱List中元素的顺序,就好像该单词的英文翻译一样:洗牌。
    示例代码:
Random random = new Random(47);
Integer[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 实例化一个list
List<Integer> list = new ArrayList<Integer>(Arrays.asList(a));
System.out.println("Before shufflig:" + list);
// 指定随机源打乱元素
Collections.shuffle(list, random);
System.out.println("After shufflig:" + list);

运行结果如下:
Before shufflig:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After shufflig:[3, 5, 2, 0, 7, 6, 1, 4, 9, 8]

    ③、boolean retainAll(Collection<?> c):仅在列表中保留指定 collection 中所包含的元素(未包含在指定collection中的所有元素均被移除),即获取两个集合的交集。
    代码如下:
Integer[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Integer[] b = { 7, 8, 9, 10, 11, 12, 13, 14 };
// 实例化两个list
List<Integer> aList = new ArrayList<Integer>(Arrays.asList(a));
List<Integer> bList = new ArrayList<Integer>(Arrays.asList(b));
System.out.println("original aList:" + aList);
// 获取aList与bList的交集
aList.retainAll(bList);
System.out.println("after retainAll:" + aList);

运行结果如下:
original aList:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
after retainAll:[7, 8, 9]

    练习题5和练习题6略过。
    练习题7:创建一个类,然后创建一个用你的类的对象进行过初始化的数组。通过使用subList()方法,创建你的List子集,然后在你的List中移除这个子集。
    代码如下:
public class Fish {

    private String kind;

    public Fish(String kind) {
        this.kind = kind;
    }

    @Override
    public String toString() {
        return "Fish [kind=" + kind + "]";
    }

    public static void main(String[] args) {
        Fish[] fishes = new Fish[] { new Fish("鲤鱼"), new Fish("飞鱼"), new Fish("金枪鱼"), new Fish("鲨鱼"), new Fish("大麻哈鱼") };
        // 实例化一个List,且获取其子集
        List<Fish> fishList = new ArrayList<Fish>(Arrays.asList(fishes));
        List<Fish> subFishList = fishList.subList(1, 3);
        // 输出父集和子集
        System.out.println("fishList:" + fishList);
        System.out.println("subFishList:" + subFishList);
        // 在父集中移除子集
        System.out.println("----------fishList removeAll subFishList----------");
        fishList.removeAll(subFishList);
        System.out.println("fishList:" + fishList);
    }
}

运行结果如下:
fishList:[Fish [kind=鲤鱼], Fish [kind=飞鱼], Fish [kind=金枪鱼], Fish [kind=鲨鱼], Fish [kind=大麻哈鱼]]
subFishList:[Fish [kind=飞鱼], Fish [kind=金枪鱼]]
----------fishList removeAll subFishList----------
fishList:[Fish [kind=鲤鱼], Fish [kind=鲨鱼], Fish [kind=大麻哈鱼]]
 

    11.6 迭代器
    迭代器是一种设计模式,而Collection里的迭代器是一个对象,它被用于遍历并选择Collection里的元素。此外,迭代器通常被称为轻量级对象,而且Iterator只能单向移动。
    使用Iterator过程如下:
    ①、用iterator()方法去创建一个迭代器实例。
    ②、用hasNext()判断是否有下一个元素。
    ③、用next()方法来获取下一个元素。
    ④、可以使用remove()方法删除该元素(可选操作)。
    迭代器能够将遍历序列的操作与序列的底层结构分离,它统一了对容器的访问方式。

    练习题8:修改练习题1,以便调用hop()时使用Iterator遍历List。
    代码如下:
public class Gerbil {

    private int gerbilNumber;

    public Gerbil(int gerbilNumber) {
        this.gerbilNumber = gerbilNumber;
    }

    public void hop() {
        System.out.println("第" + gerbilNumber + "只沙鼠,正在跳跃");
    }

    public static void main(String[] args) {
        List<Gerbil> gerbils = new ArrayList<Gerbil>();
        for (int i = 1; i <= 5; i++) {
            Gerbil gerbil = new Gerbil(i);
            gerbils.add(gerbil);
        }

        Gerbil gerbil;
        Iterator<Gerbil> it = gerbils.iterator();
        while(it.hasNext()){
            gerbil = it.next();
            gerbil.hop();
        }
    }
}

    练习题9:修改innerclasses/Sequence.java,使得在Sequence中,用Iterator取代Selector。
代码如下:
public class Sequence<T> {

    private List<T> container = new ArrayList<T>();

    public void add(T t) {
        container.add(t);
    }

    public Iterator<T> getIterator() {
        return container.iterator();
    }

    public static void main(String[] args) {
        Sequence<Employee> container = new Sequence<>();
        for (int i = 0; i < 10; i++) {
            Employee emp = new Employee(i, "compony" + i);
            container.add(emp);
        }

        Employee e;
        Iterator<Employee> it = container.getIterator();
        while (it.hasNext()) {
            e = it.next();
            System.out.println(e);
        }
    }
}

    练习题10:修改第8章中的练习9,使其使用一个ArrayList来存放Rodents,并使用一个Iterator来访问Rodent序列。→ 略过,同练习题8、9类似。
    练习题11:写一个方法,使用Iterator遍历Collection,并打印容器中每个对象的toString()。填充各种类型的Collection,然后对其使用此方法。→ 略过,同书中示例代码一样。

    11.6.1 ListIterator
    ListIterator是Iterator的子类型,它只能用于各种List类的访问。相较于Iterator,它可以双向移动,而且它可以获得当前位置的前一个和后一个元素的索引,也可以用set()方法替换它访问过的最后一个元素。有两个创建它的方法:
    ①、ListIterator<E> listIterator():产生一个指向List开始处的ListIterator。
    ②、ListIterator<E> listIterator(int index):产生一个指向List索引index处的ListIterator。

    练习题12:创建并组装一个List<Integer>,然后创建第二个具有相同尺寸的List<Integer>,并使用ListIterator读取第一个List中的元素,然后再将它们以反序插入到第二个列表中。
    代码如下:
public static void main(String[] args) {
    Integer[] a = new Integer[] { 34, 21, 7, 87, 45 };
    // 实例化正向和反向的List
    List<Integer> frontList = new ArrayList<Integer>(Arrays.asList(a));
    List<Integer> backList = new ArrayList<Integer>(frontList.size());
    // 获取正向List的ListIterator,并让其指向最后一个元素的索引
    ListIterator<Integer> lit = frontList.listIterator(frontList.size());
    // 依次获取前面的元素,放到反向的List中
    while (lit.hasPrevious()) {
        backList.add(lit.previous());
    }

    System.out.println("正向的List:" + frontList);
    System.out.println("反向的List:" + backList);
}

运行结果如下:
正向的List:[34, 21, 7, 87, 45]
反向的List:[45, 87, 7, 21, 34]

 

    11.7 LinkedList
    LinkedList实现了基本的List接口,它还添加了使其用作栈、队列或双端队列的方法。                                                        
    书中代码只是演示了添加(add()、addFirst()、addLast()、offer()等)、移除(remove()、removeFirst()、poll()等)、获取(get()、getFirst()、peek()等)API的使用,这里就不贴出来了。

    练习题13:在innerclasses/GreenhouseController.java示例中,Controller类使用的是ArrayList,修改代码,用LinkedList替换之,并使用Iterator来循环遍历事件集。
    代码如下:
public class Controller {
    // 事件容器
    private List<Event> eventList = new LinkedList<Event>();

    /**
     * 添加事件
     * 
     * @param e
     */
    public void addEvent(Event e) {
        eventList.add(e);
    }

    public void run() {
        while (eventList.size() > 0) {
            // 由于会对LinkedList产生结构性修改(如Bell事件触发的action(),会将
            // 自己添加到LinkedList里等),因此需要拷贝一个副本进行操作。
            List<Event> copyEventList = new LinkedList<Event>(eventList);
            Event e;
            Iterator<Event> it = copyEventList.iterator();
            while (it.hasNext()) {
                e = it.next();
                if (e.ready()) {
                    System.out.println(e);
                    e.action();
                    it.remove();
                }
            }
        }
    }
}

    练习题14:创建一个空的LinkedList<Integer>,通过使用ListIterator,将若干个Integer插入这个List中,插入时,总是将它们插入到List的中间。
    代码如下:
    方法一:
public static void main(String[] args) {
    List<Integer> list = new LinkedList<Integer>();
    for (int i = 0; i < 10; i++) {
        ListIterator<Integer> lit = list.listIterator(list.size() / 2);
        lit.add(i);
    }

    System.out.println(list);
}

    方法二:
public static void main(String[] args) {
    List<Integer> list = new LinkedList<Integer>();
    ListIterator<Integer> lit = list.listIterator();
    for (int i = 0; i < 10; i++) {
        lit.add(i);
        if (i % 2 == 0)
            lit.previous();
    }

    System.out.println(list);
}

运行结果如下:
[1, 3, 5, 7, 9, 8, 6, 4, 2, 0]

 

    11.8 Stack
    栈通常是指"后进先出"(LIFO)的容器。有时栈也被称为叠加栈,因为最后"压入"栈的元素,第一个"弹出"栈。
    LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。
    将LinkedList作为栈使用,书中演示代码如下:
public class Stack<T> {

    private LinkedList<T> storage = new LinkedList<T>();

    public void push(T t) {
        storage.addFirst(t);
    }

    public T peek() {
        return storage.getFirst();
    }

    public T pop() {
        return storage.removeFirst();
    }

    public boolean empty() {
        return storage.isEmpty();
    }

    public String toString() {
        return storage.toString();
    }
}

    练习题15:栈在编程语言中经常用来对表达式求值。请使用net.mindview.util.Stack对下面表达式求值,其中“+”表示“将后面的字母压进栈”,而“-”表示“弹出栈顶字母并打印它”:“+U+n+c---+e+r+t---+a-+i-+n+t+y---+ -+r+u--+l+e+s---”
    代码如下:
public static void main(String[] args) {
    String s = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+ -+r+u--+l+e+s---";
    Stack<Character> stack = new Stack<Character>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c == '+') {
            stack.push(s.charAt(++i));
        } else if (c == '-') {
            System.out.print(stack.pop());
        }
    }
}

 

    11.9 Set
    Set不保存重复元素,它常被用于测试某个对象是否在某个Set中。因此,查找是其最重要的操作,我们可以选择HashSet,它专门对快速查找进行了优化。
    Set具有与Collection完全一样的接口,它就是Collection,只是行为不同(继承与多态的典型应用:表现不同的行为)。它是基于对象的"值"来确定是否是其成员的。
    TreeSet将元素存储在红─黑树中,而且会对元素排序;HashSet使用的是散列函数;LinkedHashSet因为查询速度的原因也使用了散列,但是它使用链表来维护元素的插入顺序。
    练习题16:创建一个元音字母Set。对UniqueWords.java操作,计数并显示在每一个输入单词中的元音字母数量,并显示输入文件中的所有元音字母的数量总和。
    代码如下:
package com.example.test.container;

import java.util.Set;
import java.util.TreeSet;

import net.mindview.util.TextFile;

public class UniqueWords {

    public static void main(String[] args) {
        Set<String> words = new TreeSet<String>(new TextFile("src/com/example/test/container/SetOperations.java", "\\W+"));
        System.out.println(words);
    }
}

public class UniqueWordsVowels {

    public static void main(String[] args) {
        int totalVowel = 0;
        // 元音集合
        Set<Character> vowels = new HashSet<Character>();
        Collections.addAll(vowels, new Character[] { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' });
        // UniqueWords.java的单词集合
        Map<String, Integer> searched = new HashMap<String, Integer>();
        for (String word : new TextFile("src/com/example/test/container/UniqueWords.java", "\\W+")) {
            int wordVowel = 0;

            if (searched.containsKey(word)) {
                wordVowel = searched.get(word);
            } else {
                for (char c : word.toCharArray()) {
                    if (vowels.contains(c)) {
                        wordVowel++;
                    }
                }
                searched.put(word, wordVowel);
            }
            totalVowel += wordVowel;
            System.out.println("单词:" + word + "的元音个数为:" + wordVowel);
        }

        System.out.println("元音的个数为:" + totalVowel);
    }
}

输出结果:
单词:package的元音个数为:3
单词:com的元音个数为:1
单词:example的元音个数为:3
单词:test的元音个数为:1
单词:container的元音个数为:4
单词:import的元音个数为:2
单词:java的元音个数为:2
单词:util的元音个数为:2
单词:Set的元音个数为:1
单词:import的元音个数为:2
单词:java的元音个数为:2
单词:util的元音个数为:2
单词:TreeSet的元音个数为:3
单词:import的元音个数为:2
单词:net的元音个数为:1
单词:mindview的元音个数为:3
单词:util的元音个数为:2
单词:TextFile的元音个数为:3
单词:public的元音个数为:2
单词:class的元音个数为:1
单词:UniqueWords的元音个数为:5
单词:public的元音个数为:2
单词:static的元音个数为:2
单词:void的元音个数为:2
单词:main的元音个数为:2
单词:String的元音个数为:1
单词:args的元音个数为:1
单词:Set的元音个数为:1
单词:String的元音个数为:1
单词:words的元音个数为:1
单词:new的元音个数为:1
单词:TreeSet的元音个数为:3
单词:String的元音个数为:1
单词:new的元音个数为:1
单词:TextFile的元音个数为:3
单词:src的元音个数为:0
单词:com的元音个数为:1
单词:example的元音个数为:3
单词:test的元音个数为:1
单词:container的元音个数为:4
单词:SetOperations的元音个数为:6
单词:java的元音个数为:2
单词:W的元音个数为:0
单词:System的元音个数为:1
单词:out的元音个数为:2
单词:println的元音个数为:1
单词:words的元音个数为:1
元音的个数为:91

Java语言程序设计基础第十版第十一章课后复习题答案 Java语言程序设计基础第十版第十一章课后复习题答案。 立即下载

相关推荐

Thinking in Java专用jar包-第4版(Java编程思想专用jar包)

Java编程思想第4版,学习的时候要用到的jar包。 net.mindview.util.*等。

ArrayList#subList这四个坑,一不小心就中招

今天我们来扒一扒ArrayList#subList的四大坑。一、使用不当引起内存泄露先给大家看一段简单但是比较有意思的代码publicclassOrderService{ publicstaticvoidmain(String[]args){ OrderServiceorderService=newOrderSer...

Java知音 1654

解决创建conda环境时Solving environment: failed 和 ResolvePackageNotFound 的错误

环境配置文件是在别的机器上导出的,文件里的软件包是按照导出文件的机器配置的,因此导出的时候,把这些包的详细信息也导了出来,即第二个等号后面跟着的信息,当我们按照这个文件创建环境时,conda就会根据我们机器的配置信息,按照配置文件里包的详细信息,去找这个包,那当然找不到,结果发现“查无此包”,因此也就会报上面的错误。上面找到了问题的所在之处,解决起来就很简单了,只需要在配置文件 environment.yml 中将包的详细信息删除,也就是第二个等号后面的内容。然而升级超级慢不说,也没有解决我的问题。...

番茄炒蛋三分糖 4万+

java sublist_Java List的SubList使用问题

一、Sublist导致OOM代码@Slf4jpublic classSubListDemo {public static voidsubListOOM() {List> data = new ArrayList<>();for (int i = 0; i < 1000; i++) {List rawList = IntStream.rangeClosed(1, 100000...

weixin_39603132的博客 332

STM32CubeMX+FreeRTOS+CAN总线+传感器实战:多任务系统与通信融合开发详解

本文详细介绍了基于STM32CubeMX和FreeRTOS的CAN总线与光电传感器融合开发实战。通过多任务系统设计,实现传感器数据采集与CAN通信的协同工作,提供完整的配置例程和调试技巧,适用于工业控制与机器人感知等应用场景。

n2o3p4的博客 735

RAG开源框架深度评测:从RAGFlow到Dify的实战选型指南

本文深度评测了主流RAG开源框架(RAGFlow、Dify、WeKnora)的核心能力与实战表现,提供企业级选型指南。重点对比了文档解析、检索性能和生产部署等关键指标,揭示RAGFlow在复杂文档处理、Dify在低代码开发、WeKnora在腾讯生态集成的差异化优势,并给出技术选型决策树与成本优化方案。

weixin_29294597的博客 828

java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口

今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的。List,Set,Queue,分别是列表,集合,队列的意思,代表着Collection家族下的三种不同的势力,它们各有所长,也各有所短,就像骑兵,步兵和水兵,各有各的优势,并没有谁一定比谁更好的说法,合适的才...

weixin_39877898的博客 186

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 206

java 编程思想 11章 持有对象 练习15

练习15 (4)栈在编程语言中用来对表达式求值。请使用Stack对下面表达式求值,其中,“+“表示”将后面的字母压进栈”,而”-”表示”弹出栈顶字母并打印它”: “+U+n+c—+e+r+t—+a-+i-+n+t+y—+-+r+u–+l+e+s—” package com.js.fill.mycollision; import java.util.LinkedList; public cl...

http_503 422

自动化测试工具playwright中文文档-------1.编写测试

Playwright 测试非常简单,它们执行操作,并断言状态是否符合预期。在执行任何操作之前,无需等待任何内容:Playwright 在执行每个操作之前会自动等待一系列可操作性检查通过。此外,在执行检查时也不需要处理竞态条件——Playwright 的断言设计方式能够描述最终需要满足的期望。就这样!这些设计选择允许 Playwright 用户完全忘记他们测试中的不稳定超时和竞态检查。您将学习如何编写第一个测试如何执行操作如何使用断言测试如何在隔离环境中运行如何使用测试钩子。

2301_76646967的博客 2508

SOC设计必看!Tessent DRC检查中最容易踩的5个坑(附解决方案)

本文针对SOC设计中Tessent DRC检查的常见问题,详细分析了5个最易忽视的陷阱,包括时钟域交叉、扫描链虚连、多电压域规则等,并提供专业解决方案。特别针对芯片设计中的DFT验证难点,分享了经过验证的调试方法和Tessent工具使用技巧,帮助工程师提升DRC检查效率。

weixin_29280657的博客 496

Java编程思想第四版第十一章习题(中)

编译器:IDEA (下)的时候可能会有个小总结 题目5-26 5.修改ListFeature.java,让它使用Integer(记住自动包装机制!)而不是Pet,并解释在结果上有何不同。 package job; import java.util.*; public class Main { public static List<Integer> change(int...

Jieker的博客 961

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1065

Java编程思想第十一章"持有对象"的11.1~11.4小节的笔记和练习题

11.1 泛型和类型安全的容器 在JavaSE5之前的容器,编译器允许我们向容器中放入不正确的类型。诸如,有一个Apple对象的容器,它是一个ArrayList,而我们也可以往它里面放入一个Orange对象(这里的Apple和Orange除了继承Object之外,没有其他共性)。因为ArrayList保存的是Object,所以添加Apple、Orange在编译期和运行期都没...

hi__study的博客 612

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 946

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java技术基础——Java编程思想学习小节(一)

Java编程思想学习小节(一) 前言:由于最近在找工作,将《Java编程思想》这一经典书籍翻阅一番,回顾其中关键和精彩之处总结出来做个记录,供日后参考。如有理解错误,请不吝赐教。(从该书第5章开始) 第五章 初始化与清理 1. 函数重载 甚至参数的顺序不同,也足以区分两个方法。不过,一般情况下别这么做,因为这会使代码难以维护。对于基本类型的重载,常数整数值会被当做int型处理;如果

技术玄关 2267

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java技术基础——Java编程思想学习小节(二)

Java编程思想学习小节(二) 前言:由于最近在找工作,将《Java编程思想》这一经典书籍翻阅一番,回顾其中关键和精彩之处总结出来做个记录,并查阅相关资料进行扩展,供日后参考。如有理解错误,请不吝赐教。(从该书第5章开始) 第六章 访问权限控制、第七章 复用类 1. 编译单元 一个Java源代码文件称为一个编译单元,每个编译单元只允许有一个public类,否则编译报错。编译单元

技术玄关 1463

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java编程思想第十章"内部类"的10.3至10.6小节的练习题

10.3 使用.this与.new 在内部类中如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟.this。 练习题4:在Sequence.SequenceSelector类中增加一个方法,它可以生成对外部类Sequence的引用。 代码如下: public Sequence getSequence() { return Sequence.this; } ...

hi__study的博客 730

《Java编程思想》第四版读书笔记 第十一章 持有对象

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33989058的博客 198

day08---(05)课程大纲-章节和小节列表功能(接口)

1、 通过代码生成器生成章节、小节代码 package com.atguigu.eduservice; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.con

DKPT的博客 459

Java学习路线总结(书籍、视频推荐篇)

立志存高远,笃行践初心 三更灯火五更鸡,正是男儿读书时。 黑发不知勤学早,白首方悔读书迟。 立志,标定人生方向;奋斗,创造人生价值,二者相辅相成,互相促进。 大部分程序员的「 目标 」都是成为一名优秀的工程师,一名可以统览全局的「架构师」。 千里之行始于足下 对于大部分普通人而言,成为一名优秀的架构师还是有一定难度的,「千里之行始于足下,一步一个脚印,慢慢来」。 ???? 粉丝专属福利:包邮送书3本,如下书单四选一。 ???? 获取方式: 1、参与文末投票,点赞,收藏即有机会获得精美图书一

学Java,找哪吒 2万+

Java编程思想第4版第1章,个人阶段性总结

我打算以总分总的行文结构来写本篇博客。 本篇博客里图片的来源 “对象导论”位于全书的第一章,几乎没有代码,作者这样安排自然有这样安排的道理。“对象”是什么,及相关理论体系,先 ...

weixin_41109417的博客 395

java pdf 用系统字体大小_java 写PDF文件(章节、小节、字体、段落、表格、列表的使用)...

[java]代码库/*** 写PDF文件,展示了PDF文档、章节、小节、字体、段落、表格、列表的使用* 最后展示如何使用写入中文。* @param fileName*/public void writePDF(String fileName) {File file = new File(fileName);FileOutputStream out = null;try {//(1)实例化文档对象/...

weixin_39706441的博客 563

java学习笔记(持续更新)

如果您也在学习java,希望能够和您一起讨论,一起学习。这篇文章是记录笔者0基础学习java的过程,如果您阅读这篇文章时,发现一些错误,也希望您愿意指出。本次java学习流程以黑马程序员的java教学视频为主,其他博主或公开教程为辅。学习过程中遇到的一些个别情况或错误都会记录其中并记载解决方案。本篇学习记录会一直更新,希望能与大家一起学习,共同成长。

快乐学习,daydayup! 8321

Java编程思想:通配符(后面有两个小节,研究的不够深入)

import java.util.*; public class Test { public static void main(String[] args) { } } /* 15.9 边界 要点: 1.T继承的顺序,类放必须放在第一位,后面跟接口 2.类与接口用&进行链接 ...

weixin_30845171的博客 123

11 java 王少飞-response对象小节二

今天讲的知识比较零散,就以下面几个例子说明: 1.通过response输出认证图片 package com.hbsi.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.Bu

Dream_Mr.wang的专栏 4258
上一篇: Java编程思想第十一章"持有对象"的11.1~11.4小节的笔记和练习题
下一篇: SQLException异常:Column count doesn't match value count at row 1
hi__study
博客等级 码龄10年 14粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值