java - 代表性曝光

标签 java

尝试了解什么是表征曝光。 您能解释一下以下内容吗?

public class CharSet2 {
   private ArrayList<Character> elts    = new ArrayList<Character>();

   public void insert(Character c) { elts.add(c); }
   public void delete(Character c) { elts.remove(c); }
   public boolean member(Character c) { return elts.contains(c); }
   public ArrayList<Character> getElts() { return elts; }


   public static void main(String[] args) {
      CharSet2 s = new CharSet2();
      Character a = new Character('X');
      s.insert(a);
      //s.getElts().add(a);
      s.delete(a);
      if (s.member(a)) System.out.println("Has a");
      else System.out.println("No a");
   }
}

当s.getElts().add(a)被注释掉时,结果是“No a”,但是加上它,结果是“Has a”。这是否意味着方法 insert 不会对列表 elts 执行任何操作?我认为 s.insert(a) 和 s.getElts().add(a) 都会做同样的事情。

最佳答案

没有。

使用s.getElts().add(a);,您将在ArrayList 中拥有两个a 实例。因此,当您删除一个时,它仍然有第二个。

他们确实做同样的事情,只是方式不同。

<小时/>
s.insert(a);        // Count of a in list -> 1
s.getElts().add(a); // Count of a in list -> 2
s.delete(a);        // Count of a in list -> 1
<小时/>

CharSet2 中的方法有助于封装 ArrayList。它们不提供直接访问,但可以修改控制。尽管在直接添加和通过表示添加之间没有进行任何更改,但仍有更改的空间。

如果您想根据哈希码将元素添加到特定索引处,这将很有用。然后,在 CharSet#insert(Character) 方法中,您可以控制此行为。

关于java - 代表性曝光,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053600/

相关文章:

java - 在独立的 Java 项目中访问 DB2 数据库

java - 使用 PostgreSQL 和 Tomcat 的单个应用程序/数据库服务器的安全性

java - 具有不同自定义字体的 JButton 文本

java - viewpager2 降低水平滚动的灵敏度

java - 在java中验证XML文件

java - 如何从 ByteBuffer 解码 OGG vorbis 数据?

java - 什么是 NullPointerException,我该如何解决?

java - 使用 ArgumentMatcher 时出现 NullPointerException

java - 使用 SnakeYaml 处理缺失字段

Java CSV 编写