我的程序简而言之:
我有一个程序,连续运行几个排序算法对一组int,每个计时.GUI允许用户选择数组大小和各种随机数范围,用于填充要排序的数组.每次单击"排序"按钮都会获取用户的数组值,构造一个新数组,然后使用创建每个排序算法的数组克隆.clone().
问题:
当点击"排序"按钮时,排序第二次改进自己.
在某处我发现了一些我不理解的优化.
这是一个问题的原因:如果用户没有更改他们的数组设置并再次运行排序方法,新的数组构造新的随机数,但随机数范围保持相同,所以运行时间,超过125k的列表,应保持大致相同....不提高300%.
所以这是我面临的演示程序.它只使用一种,Java的本机类来证明这个问题.它还使用硬编码值来构造要排序的随机int数组 - 但每次"输入"按下都会这样做.我认为这个模拟准确地反映了我的程序,因为同样的"错误"也在这里发生.
...每次运行都会使用新值重建数组,那么它如何变得更快?
package sortTooFast;
import java.util.Arrays;
import java.util.Scanner;
public class SortTooFast {
public static final int ARRAY_SIZE = 500000;
public static final int MIN_RANGE = 0;
public static final int MAX_RANGE = 100;
public static final int INCLUSIVE = 1;
int[] sortingArray;
public static void main(String[] args) {
SortTooFast test = new SortTooFast();
test.run();
}
// Run program.
public void run(){
while(true){
// Assign int[] filled with random numbers. …Run Code Online (Sandbox Code Playgroud) 我正在浏览LinkedList并看到了Java中的实现.回到我尝试并实现链接列表的日子里,它有指针和地址以及大量的努力工作.使用Java,实现更容易,但仍然需要我做一些事情.我从链接列表中了解到链接列表,其中1,2,3,4是链表的节点.

但是在java中,我遇到的代码让我将LinkedList视为下图.
Java中链表的实现代码如下,
class LinkedListNode
{
LinkedListNode nextNode = null;//consider this member variable
int data;
public LinkedListNode(int data)
{
this.data = data;
}
void appendItemToLinkedList(int newData)
{
LinkedListNode end = new LinkedListNode(newData);
LinkedListNode temp = this;
while (temp.nextNode != null) { temp = temp.nextNode; }
temp.nextNode = end;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public static void main(String[] args)
{
LinkedListNode list = new LinkedListNode(10);
list.appendItemToLinkedList(20);
list.appendItemToLinkedList(30);
list.appendItemToLinkedList(40);
list.appendItemToLinkedList(50);
list.appendItemToLinkedList(60);
}
Run Code Online (Sandbox Code Playgroud)
在图中,您可以清楚地看到节点对象位于其他节点对象内.它真的是一个链表.或者是一个容纳其他容器的父容器,依此类推?
除了检查null(something == null)我们何时在Java中使用对象引用比较?
我想不出任何使用对象引用比较的情况.对于我来说,抽象所有内存分配的语言似乎有点奇怪.
在MyApp.something.BigObject我有一个内存昂贵的对象,我喜欢这样做var theObject = MyApp.something.BigObject;.我的问题是会占用双倍的记忆吗?
我有一个字节数组和一个对象引用.
byte[] data = new byte[128];
Block b = new Block();
Run Code Online (Sandbox Code Playgroud)
我想在"data"数组的最后2(或4)个字节中存储引用b .
请注意:我不想序列化对象并存储在字节数组中.我需要存储一个引用新块的指针(引用).
编辑
我的Block类如下
public class Block {
byte[] data ;
public Block(){
data = new byte[128];
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,数据数组将使用126个字节来存储字符串,并使用最后两个(或4个)字节来存储对另一个块的引用.它的链接列表.
我本可以使用Block类的不同定义[通过在类本身中包含对Block的引用]来完成它.但是问题语句指出只有最后2个字节的约束应该用作对另一个块的引用.从其他帖子我开始知道在jvm(32位)中,引用的大小为4个字节.因此我认为它只能使用最后4个字节来完成
来自问题陈述的片段
块的最后2个字节用于指向下一个块.假设文件是8块大小,那么第4块的最后2个字节将指向第5块,第5块的最后2个字节指向第6块,依此类推.
我有问题弄清楚为什么我接收"未设置为对象实例的对象引用"此表示层中的错误:
TempAccountManager.Accounts.Add(tempAccount);
我已经使用Visual Studios调试器和帐户获取创建了代码.我相信我有一个访问模块的问题,不确定.
表达层
using myBudget.BusinessObject;
using myBudget.BusinessLogic;
namespace myBudget
{
public partial class NewBudgetWizard : Form
{
public int CurrentStep { get; set; }
public Account TempAccount = new Account();
public AccountManager TempAccountManager = new AccountManager();
public NewBudgetWizard()
{
private void createAccountList(ListView lvAccounts)
{
foreach (ListViewItem lvi in lvAccounts.Items)
{
int tempAccNumber = Int32.Parse(lvi.SubItems[0].Text);
string tempAccName = lvi.SubItems[1].Text;
string tempAccType = lvi.SubItems[2].Text;
decimal tempAccBalance = decimal.Parse(lvi.SubItems[3].Text, System.Globalization.NumberStyles.Currency);
Account tempAccount = new Account(tempAccNumber, tempAccName, tempAccType, tempAccBalance, DateTime.Now);
TempAccount = …Run Code Online (Sandbox Code Playgroud) c# oop access-modifiers object-reference nullreferenceexception
本地项目运作完美.它正在执行,数据库中有适当的条目.但是当我在暂存时将它部署到云时,它会将此错误作为未设置为实例的对象引用.我的项目需要每个Web和辅助角色的2个实例,但由于我有一个限量版的免费实例,我每个只使用一个.这可能是个问题吗?我使用SDK 1.8它是ASP.Net项目.
任何人都可以建议我如何解决这个问题?
cloud instance azure object-reference nullreferenceexception
我想了解原始和对象引用变量的行为方式有何不同.我使用了Kathy Sierra的OCA/OCP Java SE7中的以下代码作为示例:
public class VariableTesting {
public static void main(String[] args) {
int a = 10;
System.out.println("a= " + a);
int b = a;
b = 30;
System.out.println("a= " + a + " after change it to b and b is " + b);
Dimension a1 = new Dimension(5, 10);
System.out.println("a1.height = " + a1.height);
Dimension b1 = a1;
b1.height = 30;
System.out.println("a1.height= " + a1.height + " after change to b1");
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我得到了a …
注意:我不是要比较角色是否等于.因为我知道如何使用String.equals()方法.这个问题是关于字符串引用的
当我开始学习类字符串及其属性作为不变性等时,我正在学习OCA考试.根据我读到或可能理解的字符串池是在创建字符串时,Java将此对象存储在他们调用的内容中字符串池,如果创建一个具有相同值的新字符串,它将引用字符串池上的字符串,除非我们使用new关键字,因为这会创建一个新引用,即使两个字符串包含相同的值.
例如:
String a = "foo";
String b = "foo";
String c = new String("foo");
boolean ab = (a == b); // This return true
boolean ac = (a == c); // This return false
Run Code Online (Sandbox Code Playgroud)
要清楚这段代码是在第一行代码中创建String a = "foo"并将其存储在String池中,而在第二行代码中它将创建String b和引用,"foo"因为它已存在于String池中.但是第3行将创建此字符串的新引用,无论它是否已存在.这是一个关于发生了什么的图形示例:

问题出现在以下代码行中.当串联创建字符串时,java会做出不同的东西或简单= =比较器有另一种行为吗?
例A:
String a = "hello" + " world!";
String b = "hello world!";
boolean compare = (a == b); …Run Code Online (Sandbox Code Playgroud) 问)如何将我的参数作为副本传递给下一页,以便在返回时不会在前一个屏幕中保留对它的更改?
例如
showDetails(item) {
this._nav.push(PersonDetailsPage, {
person: item
});
}
Run Code Online (Sandbox Code Playgroud)
因此,当我查看PersonDetailsPage时,我希望能够进行更改,取消,返回并不修改原始对象。
谢谢。
object-reference ×10
java ×6
angular ×1
arrays ×1
azure ×1
byte ×1
c# ×1
c++ ×1
cloud ×1
comparison ×1
copy ×1
instance ×1
ionic2 ×1
javascript ×1
linked-list ×1
memory ×1
null ×1
object ×1
oop ×1
optimization ×1
sorting ×1
string ×1
string-pool ×1
typescript ×1