存储在集合中的对象不应该含有基本数据结构的任何实现细节

  

  开卷有益,最近正按计划巩固自己算法与数据结构的基础知识,目前看来收获开始很多的,重拾了很多遗忘的知识,注意到很多以前没有留意的细节。在复习使用链表实现栈是,注意到了一句话:“链表结构的细节内容应该与链表所存储的元素区分开来”。

  我试着去理解这句话中包含的东西,以前我使用的链表大概是这样的:

  DATA是我们要存储的数据,如果我们想要用DATA实现链表结构,我们需要在DATA中添加一个存储DATA对象地址的变量next。之前我并没有意识到也没有去思考过这种使用方式会有什么缺陷,今天思考了一下,确实发现了这种使用方式的一些缺陷:

  1、为了使用链表存储DATA对象,DATA被迫存储了与自己无关的next变量。

  2、DATA必须明确的知道,自己会成为DATA对象链表中的一个元素。

  3、链表存储的数据和链表的结构耦合度过高,违背了集合实现细节与集合使用相分离的目标。

  解决以上问题的方案是,定义一个独立的节点类,节点类中仅包含两个成员属性,一个为指向下一节点的next,一个为指向本节点存储数据的data。next和data可以是指针,也可以是引用。

  在java中,在可以设置data的类型为Object,因为Object是所有类的父类,利用向上转型,data可以指向任何类的对象,即我们定义的链表能够存储所有类型的数据。

  

原文地址:https://www.cnblogs.com/KenBaiCaiDeMiao/p/11611597.html

时间: 2024-08-29 18:34:20

存储在集合中的对象不应该含有基本数据结构的任何实现细节的相关文章

获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)

import java.io.File; import java.io.FileFilter; import java.io.ObjectInputStream.GetField; import java.util.ArrayList; import java.util.List; public class huoquwenjian { /*获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中) * 思路: * 1,既然包含子目录,就需要递归. * 2

Java基础知识强化之IO流笔记45:IO流练习之 把文本文件中数据存储到集合中的案例

1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据源是一个文本文件.      目的地是一个集合.      而且元素是字符串.      数据源:   b.txt -- FileReader -- BufferedReader  目的地:  ArrayList<String> 2. 代码示例: 1 package cn.itcast_02; 2

如何从List集合中删除对象

这个问题看似好像挺简单挺幼稚的,然而就这个幼稚的问题还曾经困扰过我一阵呢,其实犯这个错误的根本原因是我们对于基础知识的理解和掌握上还有不足的表现,基本功有些人总是觉得不重要,认为更多的扩大学习的广度才是最重要的,我认为这是很容易犯的,同时也是很致命的错误观点! 对基础知识掌握不牢靠,或理解不深刻,写出的代码必然会有40%的概率是错误的.低效的,一段代码不是说没有编译错误就一定是对的,不是说简单的运行下就一定是对的,优秀的代码,是经得起"刀山火海"般的考验的("多线程.效率.安

对list集合中的对象进行排序(转载)

原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static void main(String[] args) { List<Integer> nums = new ArrayList&l

Lambda+Stream替换集合中每个对象的指定字段值

做某项目用的是mongodb数据库,因为Mongodb不像mysql可以联表查询,导致编码中常常会遇到将数据中无意义的ID值转换为可读的名称值. java8之前我们的代码是这么写的: 现在我们可以这么写: 注释掉的代码是开始想实现的,转念一想stream还有.forEach()方法,可以不用重新构造对象,于是就用了下面的方式. cacheService.parseGroup()做了缓存处理,这样不必每次都查数据库和进行筛查运算了.           参考文档:  http://www.runo

根据List集合中的对象属性排序

首先创建一个Student对象,里面有三个属性,分别是int类型,String类型,Date类型 package com.sinoway.cisp.test; import java.text.SimpleDateFormat; import java.util.Date; public class Student { private int age; private String name; private Date birthday; public int getAge() { return

循环获取数据库中的值,并存储到集合中

package com.zdy.getxxx; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.HashSet;import java.util.Set; public class TestStudent { public static void main(String[] args) { try { link(); } catch (E

集合中保存对象,如何按对象中的属性排序?

package testProject; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class TestPro { public static void main(String[] args) { ArrayList<TestPro> zsList = new ArrayList<TestPro>(); zsList.add(new Te

集合框架(去除ArrayList集合中的重复自定义对象元素案例)

学生类 package cn.itcast_04; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public v