背包的定义:

         背包是一种不支持从中删除元素的集合数据类型--它的目的就是帮助用列收集元素并迭代遍历所有收集到的元素(用列也可以检查背包是否为空或者获取背包中元素的数量)。迭代的顺序不确定且与用例无关。

背包的java代码的实现:

package com.learn.bag;
import java.util.Arrays;
import java.util.Iterator;

public class Bag<E> implements Iterable<E> {
private Object[] table; //背包容器内部的数据结构,是一个对象的数组。便于接受任意类型(向上转型)
private static final int DEFAULT_SIZE = 16;//默认容器大小 
private int size;//元素个数

public Bag(){
table=new Object[DEFAULT_SIZE];
}
//添加元素
public void add(E item) {
ensureCapacity();//在新增之前进行容器
table[size++] = item;
}

//容器扩容 参考ArrayList源码的实现

private void ensureCapacity() {
if (size >= table.length) {
int leg = table.length;
int newCapacity=leg + (leg >> 1);//注意要加括号leg+(leg>>1)曾因为没有加括号,数据扩容后,没有起到任何效果,导致数组越界问题。
table = Arrays.copyOf(table, newCapacity);
}

}

//判断元素是否为空

public boolean isEmpty() {
return size == 0;

}

//获取元素的数量

public int size() {
return size;
}

public E get(int i) {
assert i < 0 || i >= size;
return (E)table[i];
}

//因为要实现迭代功能,在java中必须要实现Iterable接口,实现iterator()方法,返回一个可迭代的元素(实现了Iterator接口,hasNext() 方法和next()方法,java语法糖知识)

@Override
public Iterator<E> iterator() {
return new Itr();
}

private class Itr implements Iterator<E> {
private int cursor; //cursor 进行迭代 上下指针移动

@Override
public boolean hasNext() {
return cursor != size();
}
@Override
public E next() {
int i = cursor;
cursor++;
return get(i);
}

}

}

转载于:https://www.cnblogs.com/caibixiang123/p/9256915.html

java-背包的实现相关推荐

  1. java背包_java-背包的实现

    背包的定义: 背包是一种不支持从中删除元素的集合数据类型--它的目的就是帮助用列收集元素并迭代遍历所有收集到的元素(用列也可以检查背包是否为空或者获取背包中元素的数量).迭代的顺序不确定且与用例无关. ...

  2. java背包算法_Java-背包算法实现

    介绍 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 $w_i$,其价值为 $v_i$ 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 背包问题是具有许多应用的组合优 ...

  3. java背包算法回溯法_【算法分析】实验 4. 回溯法求解0-1背包等问题

    [TOC] 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计.算法描述.算法正确性证明.算法分析.算法实现与测试),通过回溯法的在实际问题求解实践中,加深理解其基本原理和 ...

  4. JAVA GUI文字游戏

    本游戏是突发一个想法写出来的,只写了个大概,大概如下: 游戏菜单界面 游戏主界面 人物详情界面 背包界面 装备详情界面 游戏介绍: 游戏目录为src存放代码,lib存放jar包(build path加 ...

  5. AcWing蓝桥杯AB组辅导课10、疑难杂题

    文章目录 前言 例题1:AcWing 1242. 修改数组(并查集) 分析 题解:单链表式并查集 例题2:AcWing 1234. 倍数问题(背包问题+贪心) 分析 题解1:01背包问题,三维解法(贪 ...

  6. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 0-1背包问题,java的动态规划 如题,代码如下 public class dongtaiguihua01 { public static void m ...

  7. 杭电1284钱币兑换问题—背包dp/母函数(java)

    Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Out ...

  8. Java 01背包【动态规划·蓝桥杯练习题】(相信杨超越,相信锦鲤,默默努力,其它的看天意)

    锦鲤镇楼 1.题目描述: 时间限制:1.0s 内存限制:256.0MB 关键字:01背包 动态规划 问题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高 ...

  9. Java入门算法(动态规划篇2:01背包精讲)

    本专栏已参加蓄力计划,感谢读者支持❤ 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算 ...

  10. java多重背包代码实现

    自己百度搜的关于多重背包问题的java代码总是不合自己心意,所以自己来写一下: 多重背包问题涉及 :物品种类,背包限制,每种物品的重量,每种物品的数量,每种物品的价值.动态优化出最大价值. 贴代码(包 ...

最新文章

  1. php mysql 降_PHP,MySQL:mysql替代php in_array函数
  2. 砰的一声,实验室又炸鸡了
  3. db2和mysql性能优化_DB2数据库性能调优的十个办法
  4. python计算凸包并绘制凸包曲线
  5. Linux系统好用吗
  6. 深度学习2.0-41.GRU原理及实战
  7. php 依赖注入 数据库切换_PHP依赖注入(DI)和控制反转(IoC)详解
  8. 学习笔记|JSP教程|菜鸟教程
  9. 工业相机与SCARA机械臂的坐标系标定
  10. TARA-基于J3061的概念阶段流程
  11. xlsx的python处理
  12. VBS隐藏bat窗口
  13. matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量检验异常值与异常样本
  14. 离群值是什么意思_离群值!离群值?离群值!
  15. SPSS——方差分析(Analysis of Variance, ANOVA)——单因素方差分析
  16. 我要双休,单休等于没有休
  17. 竖屏图片滚动html5,详解swipe使用及竖屏页面滚动方法
  18. zookeeper--将学习过的知识放置到一个文档中,总结
  19. Vue 表情包输入组件
  20. 52.桌面上的IE图标不见了怎么办:

热门文章

  1. 计算机网络 时延、发送时延、传输时延、处理时延、排队时延、时延带宽积
  2. 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
  3. Oracle和al,ORACLEAL TERTABLE
  4. 最新安徽省二c语言题型_2020年成人高考考试考前1个月最新最全备考攻略+资料,考生必看,建议收藏!...
  5. Python操作Redis:键(Key)
  6. HashMap 精讲原理篇
  7. Delphi XE中String、ANSIString、TBytes之间的转换
  8. 一步步实现 Redis 搜索引擎 1
  9. About Wisdom
  10. 对自定义SharePoint WebService的总结